一、簡介
Peewee是一個輕量級的Python ORM框架,支持MySql,Postgresql,Sqlite等多種關係型資料庫,具有優雅的api和簡潔的實現方式。它受到Django ORM和SQLAlchemy的啟發,可以處理所有的常見資料庫操作,並具有高度的擴展性。
Peewee使用模型定義數據結構,同時支持數據表關係建模,使得開發人員可以輕鬆地進行資料庫訪問。同時,Peewee支持豐富的查詢方式和資料庫事務管理,讓開發人員可以專註於業務邏輯,而不需要關注過於底層的資料庫操作細節。
二、模型定義
在Peewee中,模型是數據結構的抽象,它通常會映射為資料庫中的一個表。在定義模型時,通常需要指定以下信息:
1. 數據表名
class Person(Model):
name = CharField()
age = IntegerField()
class Meta:
database = db # db為資料庫實例變數
db_table = 'person' # 數據表名為person
2. 欄位類型
class User(Model):
username = CharField(unique=True)
age = IntegerField(default=18)
is_admin = BooleanField(null=False, default=False)
regist_time = DateTimeField(default=datetime.now)
Peewee支持多種欄位類型,包括CharField,TextField,IntegerField等,可以通過不同的欄位類型進行靈活的數據存儲。
3. 數據關係
在Peewee中,通過外鍵實現不同數據表之間的關係。如下面的代碼示例中,Blog和Tag兩個模型之間通過ManyToManyField建立了多對多的關係:
class Blog(Model):
title = CharField()
content = TextField()
publish_date = DateField()
class Meta:
database = db # db為資料庫實例變數
class Tag(Model):
name = CharField()
blogs = ManyToManyField(Blog, backref='tags')
class Meta:
database = db # db為資料庫實例變數
三、CRUD操作
Peewee提供了多種簡潔清晰的資料庫操作方式:
1. 創建
如果需要向資料庫中插入數據,可以使用save()方法或create()方法進行創建:
new_person = Person(name='Tom', age=20)
new_person.save()
Person.create(name='Jerry', age=18)
2. 查詢
Peewee支持多種查詢方式,包括filter(),get()和raw()。其中filter()可以支持多個條件查詢,get()可以直接根據主鍵查詢,raw()可以使用原始的SQL查詢語句來進行查詢。
result = Person.filter(name='Tom', age=20)
result = Person.get(Person.id == 1)
result = Person.raw('SELECT * FROM person WHERE name=\'Tom\';')
3. 更新
如果需要更新數據,可以使用save()方法或update()方法:
person = Person.get(Person.id == 1)
person.name = 'Leo'
person.save()
Person.update(name='Jack').where(Person.age <= 20).execute()
4. 刪除
如果需要刪除數據,可以使用delete_instance()方法或delete()方法進行刪除:
person = Person.get(Person.id == 1)
person.delete_instance()
Person.delete().where(Person.age > 20).execute()
四、高級查詢
Peewee支持多種高級查詢方式,可以靈活地進行複雜的查詢操作:
1. 關聯查詢
在Peewee中,可以通過join方法進行關聯查詢。如下面的例子中,通過Blog和Tag兩個模型之間的關係建立了一張臨時表查詢對應的所有數據:
result = Blog.select().join(Tag).where(Tag.name=='Python')
for blog in result:
print(blog.title)
2. 聚合查詢
在Peewee中,可以對數據進行聚合計算。如下面的例子,在Person表中求所有人年齡的平均值:
avg_age = Person.select(fn.AVG(Person.age)).scalar()
print(avg_age)
3. 分組查詢
在Peewee中,可以通過group_by方法對數據進行分組查詢。如下面的例子,在Person表中按照年齡進行分組查詢:
query = Person\
.select(Person.age, fn.COUNT(Person.id))\
.group_by(Person.age)\
.order_by(Person.age)
for person in query:
print(person.age, person.count)
五、事務管理
在Peewee中,可以使用transaction()方法進行事務管理操作。在事務的執行中,如果出現異常,會自動回滾事務。
with db.atomic() as txn:
p1 = Person(name='Tom', age=20)
p1.save()
p2 = Person(name='Jerry', age=18)
p2.save()
六、小結
在本篇文章中,我們對Python Peewee ORM框架進行了詳細的介紹。Peewee具有簡潔的api和靈活的實現方式,支持多種關係型資料庫,並且具有優秀的擴展性。通過Peewee,我們可以在Python應用程序中輕鬆地進行資料庫訪問,並且進行複雜的查詢和事務管理操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150938.html