python ORM 模块peewee(三): Model的建立
生活随笔
收集整理的這篇文章主要介紹了
python ORM 模块peewee(三): Model的建立
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先,需要理清一下python數(shù)據(jù)與數(shù)據(jù)庫(kù)數(shù)據(jù)是怎么對(duì)應(yīng)的:
- Model類:表
- Field類:表上的列的類型
- Model實(shí)例:表上的一行數(shù)據(jù)
1. Model Class主要描述的是數(shù)據(jù)表以及其繼承的順序
這里主要是需要對(duì)Model類中的Meta類的定義規(guī)范進(jìn)行小結(jié):
除了db_table和table_alias之外,其他的字段均可以被繼承
可以看到,peewee的主鍵,索引和其他約束均可以在meta中定義。
非整型的主鍵
當(dāng)主鍵為非auto_increment時(shí),插入數(shù)據(jù)調(diào)用save()會(huì)出錯(cuò),應(yīng)該調(diào)用save(force_insert=True)
單列索引
多列索引
2. Field Class主要描述python數(shù)據(jù)類型與數(shù)據(jù)庫(kù)數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系和數(shù)據(jù)表之間的關(guān)系(外鍵,多對(duì)多)
Filed在peewee.py中有基本數(shù)據(jù)類型的定義
# 初始化函數(shù),各個(gè)字段的默認(rèn)值 def __init__(self, null=False, index=False, unique=False,verbose_name=None, help_text=None, db_column=None,default=None, choices=None, primary_key=False, sequence=None,constraints=None, schema=None)在playhouse.fields中定義的額外字段
包括
PasswordFieldManyToManyFieldCompressedFieldPickledFieldAESEncryptedField然而peewee中并不推薦使用這些Field, 例如ManyToManyField,完全可以用一個(gè)含兩個(gè)外鍵的關(guān)系表來(lái)維護(hù),ManyToMany關(guān)系在ORM中實(shí)際上也正是這樣來(lái)實(shí)現(xiàn)的,并且使用這種方式可以描述更加復(fù)雜的關(guān)系。
自定義field字段
# 1. 定義MyField類 class MyField(Field):# Field的標(biāo)簽db_field = 'my'# 返回?cái)?shù)據(jù)庫(kù)類型的值def db_value(value):pass# 返回python類型的值def python_value(value):pass# 2. 將自定義Field子類與數(shù)據(jù)表中的列關(guān)聯(lián),有兩種方法: # 1. 創(chuàng)建數(shù)據(jù)庫(kù)時(shí),給fields字段賦值 db = MySQLDatabase('my_db', fields={'my': 'my'}) # 2. 調(diào)用register_fields函數(shù) db.register_fields({'my':'my'})總結(jié)
以上是生活随笔為你收集整理的python ORM 模块peewee(三): Model的建立的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Win7快速清理痕迹】
- 下一篇: websocket python爬虫_p