版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Python的SQLAlchemy框架用法入門_ 這篇文章主要介紹了Python的SQLAlchemy框架用法入門,SQLAlchemy框架是Python中用來操作數(shù)據(jù)庫的ORM框架之一,需要的伴侶可以參考下 數(shù)據(jù)庫表是一個二維表,包含多行多列。把一個表的內(nèi)容用Python的數(shù)據(jù)結(jié)構(gòu)表示出來的話,可以用一個list表示多行,list的每一個元素是tuple,表示一行記錄,比如,包含id和name的user表: (1, Michael), (2, Bob), (3, Adam) Python的DB-API返回的數(shù)據(jù)結(jié)構(gòu)就是像上面這樣表示的。 但是用tuple表示一行很難看出表的結(jié)構(gòu)。假如把一個t
2、uple用class實(shí)例來表示,就可以更簡單地看出表的結(jié)構(gòu)來: class User(object): def _init_(self, id, name): self.id = id = name User(1, Michael), User(2, Bob), User(3, Adam) 這就是傳奇中的ORM技術(shù):Object-Relational Mapping,把關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu)映射到對象上。是不是很簡潔? 但是由誰來做這個轉(zhuǎn)換呢?所以O(shè)RM框架應(yīng)運(yùn)而生。 在Python中,最著名的ORM框架是SQLAlchemy。我們來看看SQLAlchemy的用法。 首先通過e
3、asy_install或者pip安裝SQLAlchemy: ? 1 $ easy_install sqlalchemy 然后,利用上次我們在MySQL的test數(shù)據(jù)庫中創(chuàng)建的user表,用SQLAlchemy來試試: 第一步,導(dǎo)入SQLAlchemy,并初始化DBSession: # 導(dǎo)入: from sqlalchemy import Column, String, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 創(chuàng)建
4、對象的基類: Base = declarative_base() # 定義User對象: class User(Base): # 表的名字: _tablename_ = user # 表的結(jié)構(gòu): id = Column(String(20), primary_key=True) name = Column(String(20) # 初始化數(shù)據(jù)庫連接: engine = create_engine(mysql+mysqlconnector:/root:passwordlocalhost:3306/test) # 創(chuàng)建DBSession類型: DBSession = sessionmaker(bi
5、nd=engine) 以上代碼完成SQLAlchemy的初始化和具體每個表的class定義。假如有多個表,就連續(xù)定義其他class,例如School: class School(Base): _tablename_ = school id = . name = . create_engine()用來初始化數(shù)據(jù)庫連接。SQLAlchemy用一個字符串表示連接信息: 數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動名稱:/用戶名:口令機(jī)器地址:端口號/數(shù)據(jù)庫名 你只需要依據(jù)需要替換掉用戶名、口令等信息即可。 下面,我們看看如何向數(shù)據(jù)庫表中添加一行記錄。 由于有了ORM,我們向數(shù)據(jù)庫表中添加一行記錄,可以視為添加一個User
6、對象: ? 1 2 3 4 5 6 7 8 9 10 # 創(chuàng)建session對象: session = DBSession() # 創(chuàng)建新User對象: new_user = User(id=5, name=Bob) # 添加到session: session.add(new_user) # 提交即保存到數(shù)據(jù)庫: mit() # 關(guān)閉session: session.close() 可見,關(guān)鍵是獵取session,然后把對象添加到session,最終提交并關(guān)閉。Session對象可視為當(dāng)前數(shù)據(jù)庫連接。 如何從數(shù)據(jù)庫表中查詢數(shù)據(jù)呢?有了ORM,查詢出來的可以不再是tuple,而是User對象。S
7、QLAlchemy供應(yīng)的查詢接口如下: # 創(chuàng)建Session: session = DBSession() # 創(chuàng)建Query查詢,filter是where條件,最終調(diào)用one()返回唯一行,假如調(diào)用all()則返回全部行: user = session.query(User).filter(User.id=5).one() # 打印類型和對象的name屬性: print type:, type(user) print name:, # 關(guān)閉Session: session.close() 運(yùn)行結(jié)果如下: type: class _main_.User name: Bob
8、 可見,ORM就是把數(shù)據(jù)庫表的行與相應(yīng)的對象建立關(guān)聯(lián),相互轉(zhuǎn)換。 由于關(guān)系數(shù)據(jù)庫的多個表還可以用外鍵實(shí)現(xiàn)一對多、多對多等關(guān)聯(lián),相應(yīng)地,ORM框架也可以供應(yīng)兩個對象之間的一對多、多對多等功能。 例如,假如一個User擁有多個Book,就可以定義一對多關(guān)系如下: class User(Base): _tablename_ = user id = Column(String(20), primary_key=True) name = Column(String(20) # 一對多: books = relationship(Book) class Book(Base): _tablename_ = book id = Column(String(20), primary_key=True) name = Column(String(20) # “多”的一方的book表是通過外鍵關(guān)聯(lián)到user表的: user_id = Column(String(20), ForeignKey(u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)類學(xué)校雙減工作方案
- 供水管網(wǎng)智能監(jiān)控方案
- 九江2024年統(tǒng)編版小學(xué)英語第5單元真題試卷
- 人口老齡化對養(yǎng)老保險支出的影響研究
- 家庭聘用保姆協(xié)議書(2篇)
- IT合作協(xié)議(可直接使用)
- AR虛擬現(xiàn)實(shí)技術(shù)合作合同
- 醫(yī)藥行業(yè)生物安全事故應(yīng)急處置預(yù)案
- 廣州-PEP-2024年10版小學(xué)五年級英語第五單元期末試卷
- 信息技術(shù)產(chǎn)品市場方案
- 人力資源外包服務(wù)勞務(wù)外包勞務(wù)派遣投標(biāo)方案
- 膨化食品生產(chǎn)的國家法規(guī)與標(biāo)準(zhǔn)要求解讀
- 2023年小學(xué)世界濕地日主題班會課件
- 孫燕姿所有歌曲歌詞大全(11張專輯)
- 百萬英鎊英語劇本
- 小學(xué)道德與法治-生命最寶貴教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 初中化學(xué)項(xiàng)目式教學(xué)的實(shí)施策略探究
- 第四屆全國大學(xué)生計算機(jī)能力挑戰(zhàn)賽真題及答案
- 2017版地形圖圖式與2007圖式對比
- 班級管理第2版(高等師范專業(yè))PPT完整全套教學(xué)課件
- 盆腔膿腫-盆腔膿腫護(hù)理查房優(yōu)質(zhì)材料課件
評論
0/150
提交評論