欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django中的ORM詳解(最新推薦)

 更新時間:2025年03月17日 10:55:56   作者:燃燈工作室  
Django ORM是一種用于操作數據庫的高級工具,它允許開發(fā)者通過Python代碼來管理數據庫模型和執(zhí)行查詢,而無需直接編寫SQL語句,ORM的主要優(yōu)勢是提高了開發(fā)效率,但也會犧牲一定的執(zhí)行效率,本文介紹Django的ORM詳解,感興趣的朋友一起看看吧

Django 的 ORM(Object-Relational Mapping,對象關系映射)是 Django 框架提供的數據庫抽象層,允許開發(fā)者使用 Python 代碼操作數據庫,而無需直接編寫 SQL 語句。它提供了一種高效、直觀的方式來管理數據庫模型和查詢數據。

1 ORM介紹

1.1 ORM概念

對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現(xiàn)象的技術。

簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。

ORM在業(yè)務邏輯層和數據庫層之間充當了橋梁的作用。

1.2 ORM由來

讓我們從O/R開始。字母O起源于"對象"(Object),而R則來自于"關系"(Relational)。

幾乎所有的軟件開發(fā)過程中都會涉及到對象和關系數據庫。在用戶層面和業(yè)務邏輯層面,我們是面向對象的。當對象的信息發(fā)生變化的時候,我們就需要把對象的信息保存在關系數據庫中。

按照之前的方式來進行開發(fā)就會出現(xiàn)程序員會在自己的業(yè)務邏輯代碼中夾雜很多SQL語句用來增加、讀取、修改、刪除相關數據,而這些代碼通常都是重復的。

1.3 ORM的優(yōu)勢和劣勢

1.3.1ORM的優(yōu)勢

ORM解決的主要問題是對象和關系的映射。它通常把一個類和一個表一一對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表中的每個字段。

ORM提供了對數據庫的映射,不用直接編寫SQL代碼,只需像操作對象一樣從數據庫操作數據。

讓軟件開發(fā)人員專注于業(yè)務邏輯的處理,提高了開發(fā)效率。

1.3.2 ORM的劣勢

ORM的缺點是會在一定程度上犧牲程序的執(zhí)行效率。

ORM用多了SQL語句就不會寫了,關系數據庫相關技能退化…

1.4 ORM總結

ORM只是一種工具,工具確實能解決一些重復,簡單的勞動。這是不可否認的。

但我們不能指望某個工具能一勞永逸地解決所有問題,一些特殊問題還是需要特殊處理的。

但是在整個軟件開發(fā)過程中需要特殊處理的情況應該都是很少的,否則所謂的工具也就失去了它存在的意義。

2 Django models常用字段

2.1 Django models常用字段

from django.db import models
class ForeignKey(models.Model):
    pass
class ForeignMany(models.Model):
    pass
class Event(models.Model):
    # int自增列,必須填入參數 primary_key=True。當model中沒有指定主鍵,django自動會創(chuàng)建一個列名為id的列,做為主鍵。
    a = models.AutoField(primary_key=True)  # 主鍵
    # 最常用的字段,必須指定max_length字符長度
    b = models.CharField(max_length=24, null=False)  # 項目名稱
    # 布爾型和NullBooleanField有區(qū)別,True/False,本類型不允許出現(xiàn)null。
    c = models.BooleanField(default=True)  # 是否有效
    # 可以為null的布爾型
    d = models.NullBooleanField(default=True)  # 是否顯示
    # json類型
    e = models.JSONField()  # 事件明細
    # UUID
    f = models.UUIDField()
    # 小整數 - 32768 ~ 32767
    g = models.SmallIntegerField()
    # 正小整數 0 ~ 32767
    h = models.PositiveSmallIntegerField()
    # 整數列(有符號的) -2147483648 ~ 2147483647
    i = models.IntegerField()
    # 正整數 0 ~ 2147483647
    j = models.PositiveIntegerField()
    # 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807
    k = models.BigIntegerField()
    # 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型
    l = models.DurationField()
    # 浮點型
    m = models.FloatField()
    # 金額型->100.12
    n = models.DecimalField(max_digits=5, decimal_places=2)
    # 二進制類型
    o = models.BinaryField()
    # 一對多
    p = models.ForeignKey(to=ForeignKey,  # 關聯(lián)那張表
                          to_field='project_id',  # 關聯(lián)表的那個字段,可以不指定,不指定就和關聯(lián)表的主鍵關聯(lián)
                          db_constraint=False,  # 是否生成外鍵約束(默認為True)
                          related_name="_project_id",  # 反向查詢名稱
                          on_delete=models.PROTECT,  # 關聯(lián)刪除選項
                          db_column='project_id',  # 設置表中的名稱
                          help_text='關聯(lián)到Event表的project_id',  # 說明字段,會顯示在admin后臺,不會同步到數據庫
                          )
    # 一對一,和一對多系統(tǒng),只是默認加了unique=True
    q = models.OneToOneField(to=ForeignKey,  # 關聯(lián)那張表
                             to_field='project_id',  # 關聯(lián)表的那個字段,可以不指定,不指定就和關聯(lián)表的主鍵關聯(lián)
                             db_constraint=False,  # 是否生成外鍵約束(默認為True)
                             related_name="_project_id",  # 反向查詢名稱
                             on_delete=models.PROTECT,  # 關聯(lián)刪除選項
                             db_column='project_id',  # 設置表中的名稱
                             help_text='關聯(lián)到Event表的project_id',  # 說明字段,會顯示在admin后臺,不會同步到數據庫
                             )
    # 多對多
    # 手動創(chuàng)建第三張表,雖然可以使用orm的查詢方法,但不支持使用add(), set(), remove(), clear()
    r = models.ManyToManyField(to='ForeignKey',  # 關聯(lián)那張表,也就是說和那張表關聯(lián)
                               through='ForeignMany',  # 自定義第三張表,可以不設置,不設置Django就自動生成第三張表
                               through_fields=('book', 'author')  # 自定義第三張表中,那個二個字段管理主表和關聯(lián)表,可以不設置
                               )
    # 創(chuàng)建時間,創(chuàng)建數據記錄的時候會把當前時添加到數據庫。
    s = models.DateTimeField(auto_now_add=True)
    # 修改時間,每次更新數據記錄的時候會更新該字段。
    t = models.DateTimeField(auto_now=True)
class Meta:
    # 模型在數據庫中的表名默認是 APP名稱_類名,可以通過db_table重新默認值,相當于指定模型在數據庫中的表明
    db_table = 'project_event'

2.2 Django models字段參數 null

用于表示某個字段可以為空。

unique

如果設置為unique=True 則該字段在此表中必須是唯一的 。

db_index

如果db_index=True 則代表著為此字段設置數據庫索引。

default

為該字段設置默認值。

auto_now_add

時間字段獨有,DatetimeField、DateField、TimeField這個三個時間字段,都可以設置如下屬性。

配置auto_now_add=True,創(chuàng)建數據記錄的時候會把當前時間添加到數據庫。

auto_now

時間字段獨有,DatetimeField、DateField、TimeField這個三個時間字段,都可以設置如下屬性。

配置上auto_now=True,每次更新數據記錄的時候會更新該字段。

2.3 Django models關系字段

2.3.1 ForeignKey

外鍵類型在ORM中用來表示外鍵關聯(lián)關系,一般把ForeignKey字段設置在 '一對多’中’多’的一方。

ForeignKey可以和其他表做關聯(lián)關系同時也可以和自身做關聯(lián)關系。

字段參數

to

設置要關聯(lián)的表

to_field

設置要關聯(lián)的表的字段

related_name

反向操作時,使用的字段名,用于代替原反向查詢時的’表名_set’。

例如:

class Classes(models.Model):
    name = models.CharField(max_length=32)
class Student(models.Model):
    name = models.CharField(max_length=32)
    theclass = models.ForeignKey(to="Classes")

當我們要查詢某個班級關聯(lián)的所有學生(反向查詢)時,我們會這么寫:

models.Classes.objects.first().student_set.all()

當我們在ForeignKey字段中添加了參數 related_name 后,

class Student(models.Model):
    name = models.CharField(max_length=32)
    theclass = models.ForeignKey(to="Classes", related_name="students")

當我們要查詢某個班級關聯(lián)的所有學生(反向查詢)時,我們會這么寫:

models.Classes.objects.first().students.all()

related_query_name

反向查詢操作時,使用的連接前綴,用于替換表名。

on_delete

當刪除關聯(lián)表中的數據時,當前表與其關聯(lián)的行的行為。

參數操作
models.CASCADE刪除關聯(lián)數據,與之關聯(lián)也刪除
models.DO_NOTHING刪除關聯(lián)數據,引發(fā)錯誤IntegrityError
models.PROTECT刪除關聯(lián)數據,引發(fā)錯誤ProtectedError
models.SET_NULL刪除關聯(lián)數據,與之關聯(lián)的值設置為null(前提FK字段需要設置為可空)
models.SET_DEFAULT刪除關聯(lián)數據,與之關聯(lián)的值設置為默認值(前提FK字段需要設置默認值)
models.SET刪除關聯(lián)數據,
a. 與之關聯(lián)的值設置為指定值,設置:models.SET(值)
b. 與之關聯(lián)的值設置為可執(zhí)行對象的返回值,設置:models.SET(func():return 10)

db_constraint

是否在數據庫中創(chuàng)建外鍵約束,默認為True。

2.3.2 OneToOneField

一對一字段。

通常一對一字段用來擴展已有字段。

一對一的關聯(lián)關系多用在當一張表的不同字段查詢頻次差距過大的情況下,將本可以存儲在一張表的字段拆開放置在兩張表中,然后將兩張表建立一對一的關聯(lián)關系。

字段參數

to

設置要關聯(lián)的表。

to_field

設置要關聯(lián)的字段。

on_delete

同F(xiàn)oreignKey字段。

2.3.3 ManyToManyField

用于表示多對多的關聯(lián)關系。在數據庫中通過第三張表來建立關聯(lián)關系。

字段參數

to

設置要關聯(lián)的表

related_name

同F(xiàn)oreignKey字段。

related_query_name

同F(xiàn)oreignKey字段。

symmetrical

僅用于多對多自關聯(lián)時,指定內部是否創(chuàng)建反向操作的字段。默認為True。

舉個例子:

class Person(models.Model):
    name = models.CharField(max_length=16)
    friends = models.ManyToManyField("self")

此時,person對象就沒有person_set屬性。

class Person(models.Model):
    name = models.CharField(max_length=16)
    friends = models.ManyToManyField("self", symmetrical=False)

此時,person對象現(xiàn)在就可以使用person_set屬性進行反向查詢。

through

在使用ManyToManyField字段時,Django將自動生成一張表來管理多對多的關聯(lián)關系。

但我們也可以手動創(chuàng)建第三張表來管理多對多關系,此時就需要通過through來指定第三張表的表名。

through_fields

設置關聯(lián)的字段。

db_table

默認創(chuàng)建第三張表時,數據庫中表的名稱。

多對多關聯(lián)關系的三種方式

方式一:自行創(chuàng)建第三張表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="書名")
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
# 自己創(chuàng)建第三張表,分別通過外鍵關聯(lián)書和作者
class Author2Book(models.Model):
    author = models.ForeignKey(to="Author")
    book = models.ForeignKey(to="Book")
    class Meta:
        unique_together = ("author", "book")

2.方式二:通過ManyToManyField自動創(chuàng)建第三張表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="書名")
# 通過ORM自帶的ManyToManyField自動創(chuàng)建第三張表
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
    books = models.ManyToManyField(to="Book", related_name="authors")

3.方式三:設置ManyTomanyField并指定自行創(chuàng)建的第三張表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="書名")
# 自己創(chuàng)建第三張表,并通過ManyToManyField指定關聯(lián)
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
    books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
    # through_fields接受一個2元組('field1','field2'):
    # 其中field1是定義ManyToManyField的模型外鍵的名(author),field2是關聯(lián)目標模型(book)的外鍵名。
class Author2Book(models.Model):
    author = models.ForeignKey(to="Author")
    book = models.ForeignKey(to="Book")
    class Meta:
        unique_together = ("author", "book")

注意:

當我們需要在第三張關系表中存儲額外的字段時,就要使用第三種方式。

但是當我們使用第三種方式創(chuàng)建多對多關聯(lián)關系時,就無法使用set、add、remove、clear方法來管理多對多的關系了,需要通過第三張表的model來管理多對多關系。

2.4 元信息

ORM對應的類里面包含另一個Meta類,而Meta類封裝了一些數據庫的信息。主要字段如下:

class Meta:
    #app_label聲明屬于哪個應用
    app_label='Grade_manager'
    #table_name自定義表名、如果沒有指定表名會是:應用名_類名
    db_table='grade'
    #有些數據庫有數據庫表空間,比如Oracle。你可以通過db_tablespace來指定這個模型對應的數據庫表放在哪個數據庫表空間。
    db_tablespace = "user"
    #個 DateField 或 DateTimeField 字段的名字. 若提供該選項, 該模塊將擁有一個 get_latest() 函數以得到 "最新的" 對象(依據那個字段): 得到最近一		條order_date字段記錄、
    get_latest_by = "order_date"   
    #給這個模型取一個更簡單、好讀的名字
    verbose_name = "pizza"        
    #模型的復數形式是什么
    verbose_name_plural
    # 聯(lián)合索引
    index_together=("grade","user")
    # 指定默認按什么字段排序,只有設置了該屬性,我們查詢到的結果才可以被reverse()。
    ordering="grade"

2.5 blank和null的區(qū)別

  • blank

設置為True時,字段可以為空。設置為False時,字段是必須填寫的。字符型字段CharField和TextField是用空字符串來存儲空值的。
如果為True,字段允許為空,默認不允許。

  • null

設置為True時,django用Null來存儲空值。日期型、時間型和數字型字段不接受空字符串。所以設置IntegerField,DateTimeField型字段可以為空時,
需要將blank,null均設為True。
如果為True,空值將會被存儲為NULL,默認為False。

如果想設置BooleanField為空時可以選用NullBooleanField型字段。

一句話概括,null 是針對數據庫而言,如果 null=True, 表示數據庫的該字段可以為空。blank 是針對表單的,如果 blank=True,表示你的表單填寫該字段的時候可以不填,比如 admin 界面下增加 model 一條記錄的時候。直觀的看到就是該字段不是粗體

2.6 Django models字段與mysql字段對照

django字段mysql字段準備
AutoFieldinteger AUTO_INCREMENT自增主鍵,Django Model默認提供,能夠被重寫。
BigAutoFieldbigint AUTO_INCREMENT
BooleanFieldtinyint(1)布爾類型字段,通常用于記錄狀態(tài)標記。
BinaryFieldlongblob
CharFieldvarchar(%(max_length)s)
CommaSeparatedIntegerFieldvarchar(%(max_length)s)
DecimalFieldnumeric((max_digits)s , %(decimal_places)s)開發(fā)對數據精準要求較高大的業(yè)務時考慮使用。
models.DecimalField(max_length=8, decimal_places=2)
就是定義長度為8位、精度位2位的數字,例如數字:666666.66
IntergerFieldint(11)同AutoField同樣,惟一的差異就是不自增。
PositiveIntegerFieldint(11)同IntegerField,只包含正整數。
SmallIntegerFieldsmallint小整數時通常會用到。
CommaSeparatedIntegerFieldvarchar(%(max_length)s)
DateFielddate
DateTimeFielddatetime
DurationFieldbigint
FileFieldvarchar(%(max_length)s)
FilePathFieldvarchar(%(max_length)s)
FloatFielddouble precision
IntegerFieldinteger
BigIntegerFieldbigint
IPAddressFieldchar(15)
GenericIPAddressFieldchar(39)
NullBooleanFieldbool
OneToOneFieldinteger
PositiveIntegerFieldinteger UNSIGNED
PositiveSmallIntegerFieldsmallint UNSIGNED
SlugFieldvarchar(%(max_length)s)
SmallIntegerFieldsmallint
TextFieldlongtext
TimeFieldtime
UUIDFieldchar(32)

2.7 Django models字段與Sql語句

下面這個例子定義了一個 Person 模型,包含 first_namelast_name

from django.db import models
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

first_namelast_name 是模型的字段。每個字段被指定為一個類屬性,每個屬性映射到一個數據庫列。

上面的 Person 模型將會像這樣創(chuàng)建一個數據庫表:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

一些說明:

  • 表myapp_person的名稱是自動生成的,如果你要自定義表名,需要在model的Meta類中指定 db_table 參數,強烈建議使用小寫表名,特別是使用MySQL作為后端數據庫時。
  • id字段是自動添加的,如果你想要指定自定義主鍵,只需在其中一個字段中指定 primary_key=True 即可。如果Django發(fā)現(xiàn)你已經明確地設置了Field.primary_key,它將不會添加自動ID列。
  • 本示例中的CREATE TABLE SQL使用PostgreSQL語法進行格式化,但值得注意的是,Django會根據配置文件中指定的數據庫后端類型來生成相應的SQL語句。
  • Django支持MySQL5.5及更高版本。

3 Django中的ORM

3.1 Django項目使用MySQL數據庫

  • 在Django項目的settings.py文件中,配置數據庫連接信息:
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "你的數據庫名稱",  # 需要自己手動創(chuàng)建數據庫
        "USER": "數據庫用戶名",
        "PASSWORD": "數據庫密碼",
        "HOST": "數據庫IP",
        "POST": 3306
    }
}

在Django項目的__init__.py文件中寫如下代碼,告訴Django使用pymysql模塊連接MySQL數據庫:

import pymysql
pymysql.install_as_MySQLdb()

3.2 Models自定義字段(了解為主)

class UnsignedIntegerField(models.IntegerField):
    def db_type(self, connection):
        return 'integer UNSIGNED'
class FixedCharField(models.Field):
    """
    自定義的char類型的字段類
    """
    def __init__(self, max_length, *args, **kwargs):
        super().__init__(max_length=max_length, *args, **kwargs)
        self.length = max_length
    def db_type(self, connection):
        """
        限定生成數據庫表的字段類型為char,長度為length指定的值
        """
        return 'char(%s)' % self.length
class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用上面自定義的char類型的字段
    cname = FixedCharField(max_length=25)

4.Django ORM查詢常用方法

4.1 常用查詢操作

# 獲取到所有的書籍對象,結果是對象列表
models.Book.objects.all()  
# 獲取符合條件的對象
models.Book.objects.get(**kwargs)  
# 篩選所有符合條件的,結果是對象列表
models.Book.objects.filter(**kwargs)  
# 篩選出所有不符合條件的,結果是對象列表,這個地方一直有個疑問,好像exclude里面如果是外鍵排除就不起作用
models.Book.objects.exclude(**kwargs)  
# 字典列表[{id:1,name:20},{id:2,name:18} ],values(‘id')括號內不指定時顯示全部,如指定則只顯示指定的,[ {id:1},{id:2,}]
models.Book.objects.all().values("id","name")  
# 元組列表,[ (1,20),(2,18) ]同上,指定時顯示指定內容
models.Book.objects.all().values_list("id","name")  
# 按照id升序就行排列
models.Book.objects.all().order_by("id")  
# 按照id降序就行排列
models.Book.objects.all().order_by("-id")  
# 先按age升序,age相同的按id進行降序排列
models.Book.objects.all().order_by("age", "-id") 
# 對結果反轉; 注意reverse前必須排序,否則reverse無效; 或在model.py文件中Book類中的Meta中指定ordering=("id", )注意逗號必須有
models.Book.objects.all().order_by("id").reverse()  
# 去重,當獲取到的結果Queryset列表中同一對象出現(xiàn)多次時去重,只留一個
models.Book.objects.all().values("id","name").distinct():  
# 計數,可統(tǒng)計結果個數,如對Queryset內元素數進行統(tǒng)計.
models.Book.objects.all().count() 
# 獲取結果中的第一條,即使前面結果列表為空,也不會報錯
models.Book.objects.all().first()  
# 獲取結果中的最后一條
models.Book.objects.filter().last()  
# 判斷Queryset列表是否有東西,結果為True或False;
models.Book.objects.filter().exists() 

4.2 返回值

返回對象列表(Queryset)的方法有

  • all()
  • filter()
  • ordey_by()
  • exclude()
  • values()
  • values_list()
  • reverse()
  • distinct()

返回單個對象的方法有

  • first()
  • last()
  • get()
  • create()

返回判斷布爾值的有

  • exists()

返回返回數字的有

  • count()

4.3 查詢API(QuerySet API)

4.3.1 ------ filter -----

filter(**kwargs)

返回一個新的 QuerySet ,它包含了與所給的篩選條件相匹配的對象。

這些篩選條件(**kwargs)在下面的字段篩選(Field lookups) 中有詳細介紹。多個條件之間在 SQL 語句中是 AND 關系。

# 條件查詢。(可以通過逗號,連接多個條件)  返回QuerySet查詢集(可以遍歷)
# __exact 等于。 __exact 可以省略。 (__iexact 不區(qū)分大小寫)
BookInfo.objects.filter(title__exact='天龍八部')
# 等價BookInfo.objects.filter(title__exact='天龍八部')
BookInfo.objects.filter(title='天龍八部')
# __contains 包含。模糊查詢。 (__icontains 不區(qū)分大小寫)
BookInfo.objects.filter(title__contains='天')
# __endswith 以..結尾。 __startswith 以..開頭。 (__iendswith 不區(qū)分大小寫)
BookInfo.objects.filter(title__endswith='部')
# __isnull 是否為空。 True:表示為null。 False表示not null。
BookInfo.objects.filter(title__isnull=False)
# __in 范圍查詢。
BookInfo.objects.filter(id__in=[1, 3, 5])
# __range 范圍查詢,查詢1到5的id
BookInfo.objects.filter(id__range=[1, 5])
# 大于小于
BookInfo.objects.filter(id__gt=3)  # 大于
BookInfo.objects.filter(id__lt=3)  # 小于
BookInfo.objects.filter(id__gte=3)  # 大于等于
BookInfo.objects.filter(id__lte=3)  # 小于等于
# 日期查詢,其中__gt,__lt,__gte,__lte都使用日期
BookInfo.objects.filter(pub_date__gt=date(1980, 1, 1))
# 日期查詢
BookInfo.objects.filter(pub_date__year=1980)  # 年
BookInfo.objects.filter(pub_date__month=1980)  # 月
BookInfo.objects.filter(pub_date__day=1980)  # 日
BookInfo.objects.filter(pub_date__week_day=1980)  # 周級
BookInfo.objects.filter(pub_date__hour=1980)  # 時
BookInfo.objects.filter(pub_date__minute=1980)  # 分
BookInfo.objects.filter(pub_date__second=1980)  # 秒

到此這篇關于Django的ORM詳解的文章就介紹到這了,更多相關Django ORM內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python不使用庫進行矩陣運算詳解

    Python不使用庫進行矩陣運算詳解

    這篇文章主要介紹了Python不使用庫進行矩陣運算詳解,矩陣乘法中,需要判斷兩個矩陣是否可以進行相乘,即前一個矩陣的列是否等于后一個矩陣的行,,需要的朋友可以參考下
    2023-08-08
  • Python實現(xiàn)識別圖片為文字的示例代碼

    Python實現(xiàn)識別圖片為文字的示例代碼

    這篇文章主要為大家詳細介紹了Python如何不調用三方收費接口,照樣實現(xiàn)識別圖片為文字的功能。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫的版本進行安裝

    Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫的版本進行安裝

    Pycharm創(chuàng)建的項目,使用了虛擬環(huán)境,對庫的版本進行管理,有些項目的對第三方庫的版本要求不同,可使用虛擬環(huán)境進行管理,直接想通過pip命令安裝可以參考下本文的操作步驟
    2022-07-07
  • 詳解Python開發(fā)語言中的基本數據類型

    詳解Python開發(fā)語言中的基本數據類型

    數據類型想必大家都知道是什么含義,指的是輸入數據的類型,任何數據都有明確的數據類型。本文主要和大家聊聊Python的三種基本數據類型,感興趣的可以了解一下
    2022-10-10
  • Pytho樹的直徑的計算實現(xiàn)

    Pytho樹的直徑的計算實現(xiàn)

    樹的直徑是樹中任意兩個節(jié)點之間最長路徑的長度,本文主要介紹了Pytho樹的直徑的計算實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Python從入門到精通之Hash函數的使用詳解

    Python從入門到精通之Hash函數的使用詳解

    Python提供了強大而靈活的Hash函數,用于在各種應用中實現(xiàn)數據存儲、數據校驗、加密等功能,下面將從入門到精通介紹Python中Hash函數的使用,感興趣的可以了解一下
    2023-08-08
  • python四種出行路線規(guī)劃的實現(xiàn)

    python四種出行路線規(guī)劃的實現(xiàn)

    路徑規(guī)劃中包括步行、公交、駕車、騎行等不同方式,今天借助高德地圖web服務api,實現(xiàn)出行路線規(guī)劃。感興趣的可以了解下
    2021-06-06
  • python的常見命令注入威脅

    python的常見命令注入威脅

    不過下面可是我們開發(fā)產品初期的一些血淋淋的案例,更多的安全威脅可以看看北北同學的《python hack》PPT,里面提及了不只命令執(zhí)行的威脅,那些都是我們親身經歷的代碼
    2013-02-02
  • python去除文件中重復的行實例

    python去除文件中重復的行實例

    今天小編就為大家分享一篇python去除文件中重復的行實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • DRF框架API版本管理實現(xiàn)方法解析

    DRF框架API版本管理實現(xiàn)方法解析

    這篇文章主要介紹了DRF框架API版本管理實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論