peewee的簡單使用
peewee是一個輕量級的ORM框架,peewee完全可以應對個人或企業的中小型專案的Model層,上手容易,功能強大。
一、安裝peewee模組
使用pip命令工具安裝peewee庫
pip install peewee
二、連結資料庫並建表
以mysql為例(peewee提供mysql,postgresql,sqllite)的支援。
from peewee import *
# test 指的資料庫名稱,host 指 MySql 主機地址,port 指 MySql 埠,user 使用者名稱,password 密碼
db = MySQLDatabase('test', host='127.0.0.1', port=3306, user='root', password='123456')
class BaseModel(Model):
class Meta:
database = db # 將實體與資料庫進行繫結
# 繼承自 BaseModel,直接關聯 db,並且也繼承了 Model,Model 提供增刪改查的函式
class Person(BaseModel):
name = CharField(verbose_name='姓名', max_length=10, null=False, index=True)
passwd = CharField(verbose_name='密碼', max_length=20, null=False, default='111111')
gender = IntegerField(verbose_name='性別', null=False, default=1)
is_admin = BooleanField(verbose_name='是否是管理員', default=False)
if __name__ == "__main__":
# 查詢資料庫是否連線
db.is_closed()
# 連線資料庫
db.connect()
# 建立table
Person.create_table()
下面附上mysql的截圖:
三、全部資料型別
Field Type | Sqlite | Postgresql | MySql |
---|---|---|---|
IntegerField |
integer | integer | integer |
BigIntegerField |
integer | bigint | bigint |
SmallIntegerField |
integer | smallint | smallint |
AutoField |
integer | serial | integer |
FloatField |
real | real | real |
DoubleField |
real | double precision | double precision |
DecimalField |
decimal | numeric | numeric |
CharField |
varchar | varchar | varchar |
FixedCharField |
char | char | char |
TextField |
text | text | longtext |
BlobField |
blob | bytea | blob |
BitField |
integer | bigint | bigint |
BigBitField |
blob | bytea | blob |
UUIDField |
text | uuid | varchar(40) |
DateTimeField |
datetime | timestamp | datetime |
DateField |
date | date | date |
TimeField |
time | time | time |
TimestampField |
integer | integer | integer |
IPField |
integer | bigint | bigint |
BooleanField |
integer | boolean | bool |
BareField |
untyped | not supported | not supported |
ForeignKeyField |
integer | integer | integer |
四、增刪改查
新增資料
Model.create 向資料庫中插入一條記錄,並返回一個新的例項。
if __name__ == "__main__":
p = Person.create(name="bobby", passwd="12345")
修改資料
if __name__ == "__main__" :
p = Person.create(name="bobby", email="123@321")
p = Person.get(name='bobby')
p.passwd = '999999'
# 將修改後的資料進行存庫
p.save()
修改某條資料應該先獲取到該資料,使用get()函式,賦值給引用變數進行修改,save()函式儲存。不過get()方法只能查詢一條,通過這種方法只能修改一條資料,且是第一條滿足條件的資料。
查詢資料
單個查詢:
和修改資料中的方法相同。
p = Person.select().where(Person.name == 'bobby').get()
多個查詢:
Ps = Person.select()通過select函式可以獲取所有資料。
if __name__ == "__main__":
ps = Person.select()
print(type(ps)) # <class 'peewee.ModelSelect'>
print(ps[0]) # 1
print(type(ps[0])) # <Model: Person>
for item in ps:
print(item.name) # bobby
使用 filter()函式
if __name__ == "__main__":
ps = Person.filter(name='bobby')
for item in ps:
print(item.name) # bobby
以上的查詢方式適用於比較簡單的sql查詢,如果查詢語句十分複雜,且是多表關聯就不是很靈活了。
刪除資料
刪除一條:
if __name__ == "__main__":
p = Person.get(name='bobby')
p.delete_instance()
刪除多條:
if __name__ == "__main__":
Person.delete().where(Person.name=='bobby').execute()
peewee 中有很多方法是延時執行多,需要呼叫 excute() 方法使其執行。