Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡(jiǎn)單查詢(xún)實(shí)例
最近正好在尋求一種Python的數(shù)據(jù)庫(kù)ORM (Object Relational Mapper),SQLAlchemy (項(xiàng)目主頁(yè))這個(gè)開(kāi)源項(xiàng)目進(jìn)入了我的視線(xiàn),本來(lái)想嘗試著使用Django的ORM模塊的,無(wú)奈Django的模塊聯(lián)系比較緊密,沒(méi)能單獨(dú)分拆下來(lái),一定程度上說(shuō)明Django自成體系的生態(tài)系統(tǒng)在給我們帶來(lái)快速便捷的開(kāi)發(fā)環(huán)境的同時(shí)犧牲了組裝的靈活性。
初次學(xué)習(xí),也沒(méi)實(shí)質(zhì)感覺(jué)到SQLAlchemy的好處,不過(guò)看其介紹的很多大公司均采用該項(xiàng)目,而且其支持的數(shù)據(jù)庫(kù)還是蠻豐富的,所以我覺(jué)得花點(diǎn)時(shí)間研究還是值得的。不過(guò)令人遺憾的是關(guān)于SQLAlchemy的中文資料比較少,所以對(duì)于我們這種英語(yǔ)不佳的帶來(lái)了一定的麻煩。
研究一個(gè)項(xiàng)目最好的辦法就是閱讀其官方提供的說(shuō)明文檔,當(dāng)然很輕松就找到了SQLAlchemy的文檔 (0.7)。文檔的格式和大多數(shù)項(xiàng)目一樣,有下載安裝說(shuō)明,有示例,有快速上手教程。不過(guò)我還是習(xí)慣下載個(gè)PDF慢慢研究。
下面就將我近期的閱讀學(xué)習(xí)做個(gè)筆記,當(dāng)然這個(gè)僅供參考,里面可能有自己的一些猜測(cè)和想法,不作權(quán)威依據(jù),不當(dāng)之處還希望指出。
1. 安裝SQLAlchemy
安裝部分不打算詳細(xì)介紹,可以通過(guò)easy_install或者pip進(jìn)行安裝,命令如下:
# 或者
pip install SQLAlchemy
當(dāng)然我使用的是Windows環(huán)境,所以?xún)A向于使用setup.py安裝,下載壓縮包,解壓,然后命令提示符下切換到該目錄,再運(yùn)行下面的命令:
python setup.py install
這里需要注意的是默認(rèn)安裝會(huì)編譯安裝C擴(kuò)展,這些C擴(kuò)展將直接編譯為二進(jìn)制本機(jī)代碼然后為SQLAlchemy處理數(shù)據(jù)集加速,這個(gè)是很不錯(cuò)的功能,遺憾的是Windows下提示編譯安裝擴(kuò)展失敗,當(dāng)然這不影響SQLAlchemy的使用,只是作為性能上的優(yōu)化,本機(jī)開(kāi)發(fā)環(huán)境可以不需要這些擴(kuò)展,如果不需要可以嘗試下面的命令:
pip install --global-option='--without-cextensions' SQLAlchemy
# 或者setup.py方式
python setup.py --without-cextensions install
好了,到這里安裝部分我就簡(jiǎn)單介紹完了,如果對(duì)這部分感興趣的話(huà)可以移步文檔。
最后可以檢驗(yàn)一下安裝成果:
>>> import sqlalchemy
>>> sqlalchemy.__version__
0.7.0
2. 簡(jiǎn)單的查詢(xún)
就像任何新語(yǔ)言都是從萬(wàn)能的'Hello World'開(kāi)始一樣,先簡(jiǎn)單體驗(yàn)一把SQLAlchemy,由于SQLAlchemy是管理數(shù)據(jù)庫(kù)的,所以我們需要一個(gè)數(shù)據(jù)庫(kù),自從用了Python以后,一提到數(shù)據(jù)庫(kù),拿來(lái)做實(shí)驗(yàn)的首當(dāng)其沖的就是Python自帶的SQLite3,這次我們連SQLite的數(shù)據(jù)庫(kù)文件都不需要指定了,直接創(chuàng)建一份基于內(nèi)存的數(shù)據(jù)庫(kù),也就是說(shuō)數(shù)據(jù)文件存放在內(nèi)存中,便于我們下面的測(cè)試。
我們使用create_engine創(chuàng)建數(shù)據(jù)庫(kù)連接引擎:
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:', echo=True)
create_engine的第一個(gè)參數(shù)'sqlite:///:memory:'我們知道是建立數(shù)據(jù)庫(kù)連接的,那第二個(gè)參數(shù)echo=True是做什么的呢,其實(shí)如果echo=True那么SQLAlchemy將會(huì)通過(guò)Python標(biāo)準(zhǔn)模塊logging來(lái)輸出日志,如果你在操作交互式命令控制臺(tái),一些信息將會(huì)被輸出,這里我們可能會(huì)看到SQLAlchemy生成的一些SQL語(yǔ)句,這個(gè)對(duì)于我們學(xué)習(xí)和調(diào)試是很有必要的,所以在這里我們將其設(shè)置為T(mén)rue,否則,如果不愿意SQLAlchemy這么啰嗦的話(huà)可以設(shè)置為False,這樣就看不到這些信息啦。
create_engine()將會(huì)返回一個(gè)Engine引擎實(shí)例(instance),其代表著SQLAlchemy對(duì)于數(shù)據(jù)庫(kù)的核心接口,其隱藏了各種數(shù)據(jù)庫(kù)方言(dialect)的細(xì)節(jié),實(shí)際上SQLAlchemy的底層是Python的DBAPI。
需要注意的是此時(shí)并沒(méi)有實(shí)質(zhì)上與數(shù)據(jù)庫(kù)建立連接,什么時(shí)候才會(huì)與數(shù)據(jù)庫(kù)真正建立連接呢?這個(gè)只會(huì)在你第一次查詢(xún)數(shù)據(jù)庫(kù)的時(shí)候發(fā)生。呃…這個(gè)有點(diǎn)像Lazy Loading (懶惰加載,延遲加載),也就是說(shuō)我們需要真正操作數(shù)據(jù)庫(kù)的時(shí)候才真正建立連接。SQLAlchemy很多地方用到了Lazyload,以后會(huì)有機(jī)會(huì)和大家介紹的。
接下來(lái)我們來(lái)執(zhí)行第一條SQL語(yǔ)句,同時(shí)建立數(shù)據(jù)庫(kù)連接:
>>> engine.execute("select 1").scalar()
1
好了,當(dāng)engine.execute執(zhí)行時(shí),Engine終于建立起實(shí)質(zhì)上數(shù)據(jù)庫(kù)連接了。
Engine對(duì)于數(shù)據(jù)庫(kù)連接的管理采取的是數(shù)據(jù)庫(kù)連接池 (Pool),當(dāng)連接第一次建立,SQLAlchemy將會(huì)將建立的連接放入內(nèi)部的連接池中以便于隨后的數(shù)據(jù)操作語(yǔ)句執(zhí)行時(shí)復(fù)用。
當(dāng)然關(guān)于Engine的用法并不是SQLAlchemy精彩的ORM部分,隨后我們會(huì)介紹將Engine綁定到ORM,然后使用對(duì)象來(lái)操作數(shù)據(jù)庫(kù)部分。
- Python的ORM框架SQLAlchemy入門(mén)教程
- Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹
- Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)查詢(xún)實(shí)例
- Python的ORM框架SQLObject入門(mén)實(shí)例
- Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例
- python orm 框架中sqlalchemy用法實(shí)例詳解
- Python的Django框架中forms表單類(lèi)的使用方法詳解
- 在Python的Flask中使用WTForms表單框架的基礎(chǔ)教程
- Python ORM編程基礎(chǔ)示例
相關(guān)文章
Python制作動(dòng)態(tài)詞頻條形圖的全過(guò)程
說(shuō)起動(dòng)態(tài)圖表,最火的莫過(guò)于動(dòng)態(tài)條形圖了,下面這篇文章主要給大家介紹了關(guān)于Python制作動(dòng)態(tài)詞頻條形圖的全過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11
Pandas中的loc與iloc區(qū)別與用法小結(jié)
loc函數(shù):通過(guò)行索引 “Index” 中的具體值來(lái)取行數(shù)據(jù)(如取"Index"為"A"的行)而iloc函數(shù):通過(guò)行號(hào)來(lái)取行數(shù)據(jù)(如取第二行的數(shù)據(jù)),這篇文章介紹Pandas中的loc與iloc區(qū)別與用法,感興趣的朋友一起看看吧2024-01-01
Python實(shí)現(xiàn)鏈表反轉(zhuǎn)的方法分析【迭代法與遞歸法】
這篇文章主要介紹了Python實(shí)現(xiàn)鏈表反轉(zhuǎn)的方法,結(jié)合實(shí)例形式分析了Python迭代法與遞歸法實(shí)現(xiàn)鏈表反轉(zhuǎn)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-02-02
Python實(shí)現(xiàn)簡(jiǎn)單層次聚類(lèi)算法以及可視化
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單層次聚類(lèi)算法以及可視化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
pandas刪除行刪除列增加行增加列的實(shí)現(xiàn)
這篇文章主要介紹了pandas刪除行刪除列增加行增加列的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python如何求100以?xún)?nèi)的素?cái)?shù)
在本篇文章里小編給大家分享的是關(guān)于python如何求100以?xún)?nèi)的素?cái)?shù)的方法實(shí)例,需要的朋友們可以學(xué)習(xí)下。2020-05-05
基于python traceback實(shí)現(xiàn)異常的獲取與處理
這篇文章主要介紹了基于python traceback實(shí)現(xiàn)異常的獲取與處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

