peewee的簡單使用

Monste發表於2020-08-13

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() 方法使其執行。