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

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ù);
  • 打開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)
  • 再打開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)建完畢可以通過PyCharm自帶的Database查看數(shù)據(jù)庫(kù),也可以使用其它軟件查看

  • 本想通過DBeaver打開db文件(包括連接MySQL數(shù)據(jù)庫(kù)),方便后續(xù)操作,嘗試半天發(fā)現(xiàn)可以連接但是怎么都無(wú)法顯示,不知道是否與版本問題有關(guān)(這里嘗試的是21.0.3版本),后來(lái)使用了JetBrains DataGrip(據(jù)說很好用),成功打開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)算符隔開,也支持其它比較符(大于小于等)
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_(["男"]))
# 通過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) 搜索以開頭的值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)隔開
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與字符編碼問題

    python與字符編碼問題

    這篇文章主要介紹了python與字符編碼問題,下面對(duì)編碼問題做個(gè)簡(jiǎn)單的總結(jié),感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    這篇文章主要介紹了Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)的方法

    python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了Python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python文件操作之合并文本文件內(nèi)容示例代碼

    Python文件操作之合并文本文件內(nèi)容示例代碼

    眾所周知Python文件處理操作方便快捷,下面這篇文章主要給大家介紹了關(guān)于Python文件操作之合并文本文件內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • python 計(jì)算平均平方誤差(MSE)的實(shí)例

    python 計(jì)算平均平方誤差(MSE)的實(shí)例

    今天小編就為大家分享一篇python 計(jì)算平均平方誤差的實(shí)例 (MSE),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • 如何在Cloud Studio上執(zhí)行Python代碼?

    如何在Cloud Studio上執(zhí)行Python代碼?

    這篇文章主要介紹了如何在Cloud Studio上執(zhí)行Python代碼?,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python制作微信好友背景墻教程(附完整代碼)

    Python制作微信好友背景墻教程(附完整代碼)

    這篇文章主要介紹了Python制作微信好友背景墻教程(附完整代碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 簡(jiǎn)單了解Python生成器是什么

    簡(jiǎn)單了解Python生成器是什么

    這篇文章主要介紹了簡(jiǎn)單了解Python生成器是什么,生成器就是一個(gè)在行為上和迭代器非常類似的對(duì)象,如果把迭代器比作 Android 系統(tǒng),那么生成器就是 iOS,二者功能上差不多,但是生成器更優(yōu)雅,需要的朋友可以參考下
    2019-07-07
  • python繪制雷達(dá)圖實(shí)例講解

    python繪制雷達(dá)圖實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于python繪制雷達(dá)圖實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • python字符串拼接和列表拼接方式

    python字符串拼接和列表拼接方式

    這篇文章主要介紹了python字符串拼接和列表拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論