初次學(xué)習(xí),也沒實(shí)質(zhì)感覺到SQLAlchemy的好處,不過看其介紹的很多大公司均采用該項(xiàng)目,而且其支持的數(shù)據(jù)庫還是蠻豐富的,所以我覺得花點(diǎn)時(shí)間研究還是值得的。不過令人遺憾的是關(guān)于SQLAlchemy的中文資料比較少,所以對(duì)于我們這種英語不佳的帶來了一定的麻煩。
研究一個(gè)項(xiàng)目最好的辦法就是閱讀其官方提供的說明文檔,當(dāng)然很輕松就找到了SQLAlchemy的文檔 (0.7)。文檔的格式和大多數(shù)項(xiàng)目一樣,有下載安裝說明,有示例,有快速上手教程。不過我還是習(xí)慣下載個(gè)PDF慢慢研究。
下面就將我近期的閱讀學(xué)習(xí)做個(gè)筆記,當(dāng)然這個(gè)僅供參考,里面可能有自己的一些猜測和想法,不作權(quán)威依據(jù),不當(dāng)之處還希望指出。
1. 安裝SQLAlchemy
安裝部分不打算詳細(xì)介紹,可以通過easy_install或者pip進(jìn)行安裝,命令如下:
代碼如下:
easy_install SQLAlchemy
# 或者
pip install SQLAlchemy
代碼如下:
python setup.py install
代碼如下:
pip install --global-option='--without-cextensions' SQLAlchemy
# 或者setup.py方式
python setup.py --without-cextensions install
最后可以檢驗(yàn)一下安裝成果:
代碼如下:
>>> import sqlalchemy
>>> sqlalchemy.__version__
0.7.0
2. 簡單的查詢
就像任何新語言都是從萬能的'Hello World'開始一樣,先簡單體驗(yàn)一把SQLAlchemy,由于SQLAlchemy是管理數(shù)據(jù)庫的,所以我們需要一個(gè)數(shù)據(jù)庫,自從用了Python以后,一提到數(shù)據(jù)庫,拿來做實(shí)驗(yàn)的首當(dāng)其沖的就是Python自帶的SQLite3,這次我們連SQLite的數(shù)據(jù)庫文件都不需要指定了,直接創(chuàng)建一份基于內(nèi)存的數(shù)據(jù)庫,也就是說數(shù)據(jù)文件存放在內(nèi)存中,便于我們下面的測試。
我們使用create_engine創(chuàng)建數(shù)據(jù)庫連接引擎:
代碼如下:
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:', echo=True)
create_engine()將會(huì)返回一個(gè)Engine引擎實(shí)例(instance),其代表著SQLAlchemy對(duì)于數(shù)據(jù)庫的核心接口,其隱藏了各種數(shù)據(jù)庫方言(dialect)的細(xì)節(jié),實(shí)際上SQLAlchemy的底層是Python的DBAPI。
需要注意的是此時(shí)并沒有實(shí)質(zhì)上與數(shù)據(jù)庫建立連接,什么時(shí)候才會(huì)與數(shù)據(jù)庫真正建立連接呢?這個(gè)只會(huì)在你第一次查詢數(shù)據(jù)庫的時(shí)候發(fā)生。呃…這個(gè)有點(diǎn)像Lazy Loading (懶惰加載,延遲加載),也就是說我們需要真正操作數(shù)據(jù)庫的時(shí)候才真正建立連接。SQLAlchemy很多地方用到了Lazyload,以后會(huì)有機(jī)會(huì)和大家介紹的。
接下來我們來執(zhí)行第一條SQL語句,同時(shí)建立數(shù)據(jù)庫連接:
代碼如下:
>>> engine.execute("select 1").scalar()
1
Engine對(duì)于數(shù)據(jù)庫連接的管理采取的是數(shù)據(jù)庫連接池 (Pool),當(dāng)連接第一次建立,SQLAlchemy將會(huì)將建立的連接放入內(nèi)部的連接池中以便于隨后的數(shù)據(jù)操作語句執(zhí)行時(shí)復(fù)用。
當(dāng)然關(guān)于Engine的用法并不是SQLAlchemy精彩的ORM部分,隨后我們會(huì)介紹將Engine綁定到ORM,然后使用對(duì)象來操作數(shù)據(jù)庫部分。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com