peewee的簡單使用

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

Tags: