国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python ORM框架SQLAlchemy學(xué)習(xí)筆記之映射類使用實例和Session會話介紹

2020-02-23 05:27:52
字體:
供稿:網(wǎng)友

1. 創(chuàng)建映射類的實例(Instance)

前面介紹了如何將數(shù)據(jù)庫實體表映射到Python類上,下面我們可以創(chuàng)建這個類的一個實例(Instance),我們還是以前一篇文章的User類為例,讓我們創(chuàng)建User對象:
代碼如下:
>>> ed_user = User('ed', 'Ed Jones', 'edspassword')
>>> ed_user.name
'ed'
>>> ed_user.password
'edspassword'
>>> str(ed_user.id)
'None'
和普通的Python類一樣實例化,大家可能會問為什么ed_user.id會是None值,首先id這個屬性沒有通過__init__()構(gòu)造方法初始化,所以默認會因為先前定義的ORM的id列(Column)而產(chǎn)生一個None值,在默認情況下,ORM會為所有被映射的表列創(chuàng)建類屬性,這些屬性是通過Python語言中描述符(Descriptors)機制來實現(xiàn)的。所以這些屬性的使用會包含一些額外的行為,包括跟蹤修改,或者當需要時自動從數(shù)據(jù)庫加載新的數(shù)據(jù),也就是說我們在使用這些屬性時,包括修改或者讀取,都會觸發(fā)ORM內(nèi)部的一系列動作。


等等,你還沒有說明白為什么id這個屬性會為None值呢。呵呵,其實我們現(xiàn)在并沒有將數(shù)據(jù)插入數(shù)據(jù)庫,一般主鍵這個屬性會在插入數(shù)據(jù)庫時自動產(chǎn)生一個不重復(fù)的值以保證唯一性。由于我們沒有對對象實行持久化(Persist) (所謂的持久化就是把對象數(shù)據(jù)按照映射關(guān)系存儲入數(shù)據(jù)庫里) 所以這里id值為None。別著急,稍后當我們介紹將數(shù)據(jù)持久化后你就可以看到一個新的自動產(chǎn)生的id了。

接下來小偷懶一下,介紹一個偷懶的技巧:-)

假如我們不定義映射類的構(gòu)造方法__init__()會帶來什么不良影響嗎?完全不會,SQLAlchemy為我們考慮到這點,假如我們偷懶將先前的User類定義成這樣:
代碼如下:
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)
由于User繼承自Base (Base定義見上一篇文章),所以受到Declarative系統(tǒng)的管理,Declarative系統(tǒng)發(fā)現(xiàn)這個類缺少構(gòu)造方法,于是很友善的給我們補上了一個構(gòu)造方法,當然其提供的構(gòu)造方法則不能像我們自己定義的構(gòu)造方法那樣使用基于位置的參數(shù)訪問,建議使用基于鍵的參數(shù)訪問方式,包括我們所有用Column定義映射的列,比如如下方式:
代碼如下:
u1 = User(name='ed', fullname='Ed Jones', password='foobar')
id也可以傳入,通常意義上這類主鍵由系統(tǒng)自動維護,我們無需為其賦值。

2. 創(chuàng)建并使用會話(Session)

到這里可謂是“萬事俱備,只欠東風(fēng)了”,用官方文檔的話說“我們現(xiàn)在已經(jīng)準備好和數(shù)據(jù)庫‘交談'了” (We're now ready to start talking to the database)。ORM的操作句柄(Handle)被稱為會話(Session)。為了使用會話,我們需要先配置它,配置Session的代碼語句應(yīng)該和create_engine()創(chuàng)建引擎的代碼語句在一個代碼級別上(放在一起就行了)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌苏市| 抚顺县| 昌乐县| 葵青区| 福清市| 炎陵县| 镇宁| 西乌珠穆沁旗| 博乐市| 织金县| 东方市| 嵊州市| 繁峙县| 巧家县| 鸡西市| 周口市| 榆中县| 和田县| 岳池县| 乐至县| 霍邱县| 阿巴嘎旗| 太谷县| 剑阁县| 朝阳县| 贵港市| 绥宁县| 盐山县| 长海县| 凌海市| 盘山县| 双城市| 扎鲁特旗| 栖霞市| 长垣县| 清水河县| 江西省| 武功县| 右玉县| 射阳县| 东兰县|