最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Peewee創(chuàng)建數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例

 更新時(shí)間:2023年08月29日 14:34:23   作者:盛夏光年ltk  
Peewee是一個(gè)簡(jiǎn)單小巧的Python ORM,本文主要介紹了Python使用Peewee創(chuàng)建數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

Peewee簡(jiǎn)介

Peewee是一個(gè)簡(jiǎn)單小巧的Python ORM(對(duì)象關(guān)系映射 Object Relational Mapping,簡(jiǎn)稱ORM),支持SQLite、MySQL、PostgreSQL等數(shù)據(jù)庫(kù),本文主講前兩者。

創(chuàng)建MySQL數(shù)據(jù)庫(kù)

  • 去官網(wǎng)下載MySQL并啟動(dòng)mysql服務(wù);
  • 打開(kāi)MySQL Workbench配置好數(shù)據(jù)庫(kù),如密碼等;
  • 在PyCharm中用Peewee創(chuàng)建數(shù)據(jù)庫(kù),如db_model.py;
from peewee import *
# test為數(shù)據(jù)庫(kù)名,并需安裝mysql庫(kù)
db = MySQLDatabase("test", **{'charset': 'utf8', 'use_unicode': True, 'host': 'localhost', 'user': 'root', 'password': '***'})
# 基類
class BaseModel(Model):
    class Meta:
        database = db
# 表類
class Test(BaseModel):
    id = IntegerField(primary_key=True)
    name = CharField()
    gender = CharField()
    class Meta:
    	# 表名
        table_name = 'Test'
# 創(chuàng)建表
def create_table(table):
    if not table.table_exists():
        table.create_table()
# 刪除表
def drop_table(table):
    if table.table_exists():
        table.drop_table()
# 創(chuàng)建一張Test表
create_table(Test)
  • 再打開(kāi)MySQL Workbench就可以看到剛剛創(chuàng)建的Test數(shù)據(jù)庫(kù)和Test表;

創(chuàng)建SQLite數(shù)據(jù)庫(kù)

  • SQLite數(shù)據(jù)庫(kù)可以直接由Peewee創(chuàng)建,與上db_model.py類似,修改創(chuàng)建語(yǔ)句即可;
#  數(shù)據(jù)庫(kù)文件路徑
db_path = "../database/test.db"
db = SqliteDatabase(db_path)
# PostgreSQL數(shù)據(jù)庫(kù)則調(diào)用PostgresqlDatabase方法即可
# db = PostgresqlDatabase('test', user='postgres')

創(chuàng)建完畢可以通過(guò)PyCharm自帶的Database查看數(shù)據(jù)庫(kù),也可以使用其它軟件查看

  • 本想通過(guò)DBeaver打開(kāi)db文件(包括連接MySQL數(shù)據(jù)庫(kù)),方便后續(xù)操作,嘗試半天發(fā)現(xiàn)可以連接但是怎么都無(wú)法顯示,不知道是否與版本問(wèn)題有關(guān)(這里嘗試的是21.0.3版本),后來(lái)使用了JetBrains DataGrip(據(jù)說(shuō)很好用),成功打開(kāi)db文件(也可以使用SQLite Studio)

Peewee操作數(shù)據(jù)庫(kù)

列舉常用操作,即增刪改查,其它操作后續(xù)慢慢補(bǔ)充

新增

t = Tset(name="test", gender="男")
t.save()
# 或者
t = Test()
t.name = "test"
t.gender = "男"
t.save()
# insert() 只插入數(shù)據(jù),不返回對(duì)象實(shí)例
Test.insert(name="test", gender="男").excute()
# insert_many() 插入多行,rows為元組或字典列表,fields為需要插入的字段名list列表
rows = [
	{"name": "test1", "gender": "男"},
	{"name": "test2", "gender": "女"}
]
insert_many(rows, fields=None).execute()
# 或
rows = [
	{"test1", "男"},
	{"test2", "女"}
]
fields = ["name", "gender"]
insert_many(rows, fields=fields).execute()

刪除

# where()是條件,execute()是執(zhí)行
Test.delete().where(Test.name == "test").execute()
# 已經(jīng)實(shí)例化的數(shù)據(jù), 使用delete_instance()
t = Tset(name="test", gender="男").save()
t.delete_instance()

查詢

找到了會(huì)返回model實(shí)例,未找到會(huì)拋出異常DoesNotExist

# 查詢單條數(shù)據(jù),多條件用逗號(hào)或邏輯運(yùn)算符隔開(kāi),也支持其它比較符(大于小于等)
t = Test.get(Test.name == "test")
# 使用where().get()查詢
t = Test.select().where(Test.name == "test").get()
# 查詢多條數(shù)據(jù)
tests = Test.select().where(Test.gender == "男")
# 迭代結(jié)果
for t in tests:
    t.save()
# in操作
tests = Test.select().where(Test.gender.in_(["男"]))
# 通過(guò)id獲取
t = Test.get_by_id(1)
# 嘗試獲取,不存在則創(chuàng)建,t為實(shí)例,created為是否創(chuàng)建
# 參數(shù)name為自定義查詢條件,dafaults并非查詢條件,而是創(chuàng)建字段
t, created = Test.get_or_create(name="test", defaults={"gender": "男"})
# {"gender": "男"}也可以寫作dict(gender="男")
# 查詢結(jié)果轉(zhuǎn)字典dicts
t = Test.select().dicts()
# 只返回元組迭代器tuples
t = Test.select().tuples()

查詢條件支持的比較符和運(yùn)算符

符號(hào)含義
&
|
~
==等于
<小于
<=小于等于
>大于
>=大于等于
!=不等于
<<x in y,其中 y 是列表或查詢
>>x is y,其中 y 可以是 None
%x like y,where(Test.name % “a*”)區(qū)分大小寫
**x like y,where(Test.name ** “a%”)不區(qū)分大小寫

其它查詢條件,如

tests = Test.select().where(Test.name.contains("t"))

.in_(value) IN查找(與相同<<)。
.not_in(value) 不在查詢中。
.is_null(is_null) 是NULL還是IS NOT NULL。接受布爾參數(shù)。
.contains(substr) 通配符搜索子字符串。
.startswith(prefix) 搜索以開(kāi)頭的值prefix。
.endswith(suffix) 搜索以結(jié)尾的值suffix。
.between(low, high) 在low和之間搜索值high。
.regexp(exp) 正則表達(dá)式匹配(區(qū)分大小寫)。
.iregexp(exp) 正則表達(dá)式匹配(不區(qū)分大小寫)。
.bin_and(value) 二進(jìn)制AND。
.bin_or(value) 二進(jìn)制或。
.concat(other) 使用串聯(lián)兩個(gè)字符串或?qū)ο髚|。
.distinct() 標(biāo)記列以進(jìn)行DISTINCT選擇。
.collate(collation) 用給定的排序規(guī)則指定列。
.cast(type) 將列的值強(qiáng)制轉(zhuǎn)換為給定的類型。

修改

# 已經(jīng)實(shí)例化的數(shù)據(jù),直接修改對(duì)象屬性并save()
t = Tset(name="test", gender="男").save()
t.gender = "女"
t.save()
# 查詢后并用update()更新
t = Tset.update({Tset.gender: "女"}).where(Person.name == "test")
t.execute()
# 查詢出對(duì)象并修改屬性
t = Test.get(Test.name == 'test')
t.gender = "女"
t.save()

其它

# 使用order_by()進(jìn)行排序,多個(gè)字段用分號(hào)隔開(kāi)
tests = Test.select().order_by(Test.id)
# 升序(默認(rèn))
tests = Test.select().order_by(Test.id.asc())
tests = Test.select().order_by(+Test.id)
# 降序
tests = Test.select().order_by(Test.id.desc())
tests = Test.select().order_by(-Test.id)
# 使用count()進(jìn)行統(tǒng)計(jì)
n = Test.select().count()
# 執(zhí)行原生語(yǔ)句
name = "test"
gender = "男"
Test.raw('SELECT * FROM test WHERE name= %s and gender = %s', name, gender)
# fn操作
# 1.Avg 平均值
# 2.Sum 和
# 3.Max 最大值
# 4.Min 最小值
# 5.Count 合計(jì)
# 6.Substr 切片
t= Test.select(fn.MAX(Test.id))

補(bǔ)充

創(chuàng)建表格時(shí)的常用類型

AutoField:integer
JsonField: 8字節(jié)
MediumJSONField: 16字節(jié)
UUIDField:varchar(40)
CharField:varchar
IntegerField:integer
DecimalField:numeric
TextField:text
DateTimeField:datetime
DateField:date
TimeField:time
FixedCharField:char
BigAutoField:bigint
BigIntegerField:bigint
SmallIntegerField:smallint
IdentityField:not supported
FloatField:real
DoubleField:double precision
BlobField:blob
BitField:bigint
BigBitField:blob
BinaryUUIDField:varbinary(16)
TimestampField:integer
IPField:bigint
BooleanField:bool
BareField:not supported
ForeignKeyField:integer
ManyToManyField:無(wú)

創(chuàng)建表格時(shí)的常用字段

null = False 是否允許空字符串。
index = False 是否創(chuàng)建普通索引。
unique = False 是否創(chuàng)建唯一索引。
column_name = None 在數(shù)據(jù)庫(kù)中指定列的名稱,一般不設(shè)置會(huì)使用定義model時(shí)的變量名作為列名。
default = None 設(shè)置默認(rèn)值。
primary_key = False 是否為主鍵。
constraints = None 增加約束,如果增加,該值是一個(gè)列表。
collation = None 用于排序字段或索引的排序規(guī)則。
choices = None 設(shè)置可選的枚舉選項(xiàng),值是一個(gè)元組,元素也是一個(gè)元組,例如((1,‘女’),(2,‘男’))。
help_text = None 設(shè)置備注或注釋文本。
verbose_name = None 設(shè)置一個(gè)可讀性良好的名稱,例如 name = CharField(verbose_name = ‘用戶名’)。
index_type = None 指定索引類型,不常用,一般默認(rèn)即可。

到此這篇關(guān)于Python使用Peewee創(chuàng)建數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python Peewee創(chuàng)建數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文搞懂Python?List和Tuple的區(qū)別

    一文搞懂Python?List和Tuple的區(qū)別

    list和tuple都是可迭代對(duì)象中的容器序列,能夠存放不同類型的數(shù)據(jù),并且存的是它們所包含的任意類型的對(duì)象的引用,這算是兩者之間的一個(gè)相同點(diǎn),本文詳細(xì)給大家介紹了Python?List和Tuple的區(qū)別,需要的朋友可以參考下
    2025-05-05
  • 詳解Python遍歷文件和文件路徑拼接

    詳解Python遍歷文件和文件路徑拼接

    這篇文章主要為大家詳細(xì)介紹了Python遍歷文件和文件路徑拼接的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Pyqt5將多個(gè)類組合在一個(gè)界面顯示的完整示例

    Pyqt5將多個(gè)類組合在一個(gè)界面顯示的完整示例

    這篇文章主要給大家介紹了關(guān)于Pyqt5將多個(gè)類組合在一個(gè)界面顯示的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)

    淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)

    下面小編就為大家分享一篇淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python使用pdfplumber庫(kù)一鍵提取pdf中的所有超鏈接

    python使用pdfplumber庫(kù)一鍵提取pdf中的所有超鏈接

    超鏈接在 pdf 中被歸類為“鏈接注釋”(Link Annotations),本文將詳細(xì)介紹Python如何基于pdfplumber庫(kù)提取PDF中超鏈接,希望對(duì)大家有所幫助
    2026-04-04
  • django創(chuàng)建簡(jiǎn)單的頁(yè)面響應(yīng)實(shí)例教程

    django創(chuàng)建簡(jiǎn)單的頁(yè)面響應(yīng)實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于django如何創(chuàng)建簡(jiǎn)單的頁(yè)面響應(yīng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用python實(shí)現(xiàn)正則匹配檢索遠(yuǎn)端FTP目錄下的文件

    使用python實(shí)現(xiàn)正則匹配檢索遠(yuǎn)端FTP目錄下的文件

    這篇文章主要介紹了使用python實(shí)現(xiàn)正則匹配檢索遠(yuǎn)端FTP目錄下的文件的方法,非常的簡(jiǎn)單實(shí)用,需要的小伙伴參考下
    2015-03-03
  • Jupyter安裝鏈接aconda實(shí)現(xiàn)過(guò)程圖解

    Jupyter安裝鏈接aconda實(shí)現(xiàn)過(guò)程圖解

    這篇文章主要介紹了Jupyter安裝鏈接aconda實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python文件解析之Excel/Word/PDF的解析、處理、預(yù)覽與下載

    Python文件解析之Excel/Word/PDF的解析、處理、預(yù)覽與下載

    本文詳細(xì)介紹了如何實(shí)現(xiàn)一個(gè)文件上傳、解析、預(yù)覽、編輯和下載的系統(tǒng),支持Excel、Word和PDF格式,系統(tǒng)使用了Python和前端技術(shù),通過(guò)插件化設(shè)計(jì),靈活支持不同的文件格式處理,每個(gè)文件類型都有詳細(xì)的解析、處理、預(yù)覽和編輯流程,以及相應(yīng)的API接口,需要的朋友可以參考下
    2026-02-02

最新評(píng)論

宁阳县| 永定县| 蛟河市| 浮梁县| 璧山县| 大新县| 松溪县| 额敏县| 承德市| 潼南县| 枞阳县| 吉隆县| 南宫市| 临武县| 大渡口区| 绥芬河市| 东方市| 和平县| 信丰县| 乌审旗| 电白县| 延川县| 东兴市| 临桂县| 滁州市| 彭山县| 逊克县| 城口县| 墨玉县| 崇文区| 阜阳市| 仙桃市| 大理市| 甘泉县| 万全县| 漳平市| 固安县| 长葛市| 商南县| 黑河市| 孟州市|