初探peewee

為了不做無病呻吟,保持信息不被淹沒,所有內(nèi)容都是以問答形式書寫。

1.什么是ORM?

把數(shù)據(jù)庫操作封裝映射成為對象的操作,保持編程的統(tǒng)一性。在peewee甚至其他的ORM中都是如何映射的:

映射關(guān)系

簡單粗暴,數(shù)據(jù)庫中包含數(shù)據(jù)表,表結(jié)構(gòu)就是字段,數(shù)據(jù)就是記錄。所以定義model class,并包含不同field實(shí)例化就是創(chuàng)建表的過程,給model用數(shù)據(jù)實(shí)例化就是存儲數(shù)據(jù)。

2.如何使用peewee?

安裝:pip install peewee

在文件中引用,并創(chuàng)建數(shù)據(jù)庫:

? ??from peewee import*

????db=SqliteDatabase('people.db')

根據(jù)業(yè)務(wù)需要?jiǎng)?chuàng)建table并且定義table的相關(guān)操作,這個(gè)也是重點(diǎn)

3.創(chuàng)建table

方式1
方式2

看出兩種方式的異同了嗎?都會用到Model的繼承,區(qū)別在1是直接繼承Model,就是這個(gè)最單純的Model,綁定數(shù)據(jù)庫db也定義在里面,而2是先用basemodel繼承model,并包含了公共信息db,然后我們定義的table再繼承這個(gè)不單純的basemodel.

4.來個(gè)外鍵

ForeignKeyField()

不要理解為數(shù)據(jù)庫中外鍵和主鍵的對應(yīng)關(guān)系,就理解成對象與對象之間的一對多的關(guān)聯(lián)

5.一些最基礎(chǔ)的API調(diào)用

db.connect()和db.close(),在一個(gè)web請求來的時(shí)候鏈接,操作完成后斷開

db.create_tables([Person,Pet]),根據(jù)上面定義好的表結(jié)構(gòu)來創(chuàng)建table,上面只是定義而已,這里可以批量創(chuàng)建

grandma=Person.create(name='Grandma',birthday=date(1935,3,1),is_relative=True)

uncle_bob=Person(name='Bob',birthday=date(1960,1,15),is_relative=True)

給表增加數(shù)據(jù)有以上兩種方式,一個(gè)是對table class直接實(shí)例化,二是使用class的create方法來實(shí)例化,參數(shù)一樣

uncle_bob.save()將以上的操作給保存到table中,并返回影響的行數(shù)

herb_mittens.delete_instance()相反,刪除某記錄,并返回行數(shù)

6.查詢的基本操作

grandma=Person.get(Person.name=='Grandma L.') 單個(gè)結(jié)果查詢用get方法

Pet.select().where(Pet.animal_type=='cat')獲得一列結(jié)果selet(),或者加上where限制條件的一列結(jié)果

Pet.select(Pet,Person).join(Person).where(Pet.animal_type=='cat')這是關(guān)聯(lián)列表的正確查詢姿勢。我們知道pet和person是關(guān)聯(lián)在一起的,如果我們要訪問pet.owner.name,那么這樣做會提高效率,Pet.select(Pet,Person).join(Person)這個(gè)過程就是把pet和person根據(jù)關(guān)聯(lián)關(guān)系給一起查了,后面的where是限制條件。如果不這樣做,而是直接使用pet.owner.name,那么就相當(dāng)于一個(gè)二層循環(huán)了,效率低下。

person.pets.count()

for pet in person.pets

這兩個(gè)說明一對多關(guān)系中一是可以有統(tǒng)計(jì)信息的,比如count(),也可以循環(huán),我們知道"pets"就是我們定義在一(person)中的related_name

7.高級操作

在基于對數(shù)據(jù)庫的理解上區(qū)看文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容