日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python ORM 模块peewee(三): Model的建立

發(fā)布時(shí)間:2023/12/18 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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é):

  • 當(dāng)Meta類建立后,不應(yīng)該通過(guò)mymodel.Meta來(lái)進(jìn)行訪問(wèn),而應(yīng)該使用mymodel._meta, 這是一個(gè)ModelOption類的實(shí)例, 可以通過(guò)它獲取model和Meta的一些屬性
  • Meta的可用屬性有:

    除了db_table和table_alias之外,其他的字段均可以被繼承
    可以看到,peewee的主鍵,索引和其他約束均可以在meta中定義。
  • 主鍵的定義
  • class mymodel1(Model):name = CharField(max_length=200, primary_key=True) #將該字段設(shè)為主鍵class mymodel2(Model):name = CharField(max_length=200)Meta:# 如果要不使用主鍵primary_key = Falseclass mymodel3(Model):blog = ForeignKeyField(Blog)tag = ForeignKeyField(Tag)class Meta:primary_key = CompositeKey('blog', 'tag') # primary_key實(shí)際上是CompositeKey的一個(gè)實(shí)例

    非整型的主鍵
    當(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。