Python的SQLAlchemy框架用法入門__1_第1頁
Python的SQLAlchemy框架用法入門__1_第2頁
Python的SQLAlchemy框架用法入門__1_第3頁
Python的SQLAlchemy框架用法入門__1_第4頁
Python的SQLAlchemy框架用法入門__1_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論