python sql解析引擎_python SQLAlchemy 中的Engine详解
先看這張圖,這是從官方網(wǎng)站扒下來的。
Engine 翻譯過來就是引擎的意思,汽車通過引擎來驅(qū)動,而 SQLAlchemy 是通過 Engine 來驅(qū)動,Engine 維護(hù)了一個連接池(Pool)對象和方言(Dialect)。方言簡單而言就是你連的到底是 MySQL 還是 Oracle 或者 PostgreSQL 還是其它數(shù)據(jù)庫,關(guān)于方言(Dialect)的介紹在另外一篇文章有介紹,可參考數(shù)據(jù)庫方言dialect。
連接池很重要,因?yàn)槊看伟l(fā)送sql查詢的時候都需要先建立連接,如果程序啟動的時候事先就初始化一批連接放在連接池,每次用完后又放回連接池給其它請求使用,就能大大提高查詢的效率。
Engine 初始化
Engine 的初始化非常簡單,通過工廠函數(shù) create_engine 就可以創(chuàng)建。
from sqlalchemy import create_engine
engine = create_engine('mysql://user:password@localhost:3306/test?charset=utf8mb4')
構(gòu)建好 Engine 對象的同時,連接池和Dialect也創(chuàng)建好了,但是這時候并不會立馬與數(shù)據(jù)庫建立真正的連接,只有你調(diào)用 Engine.connect() 或者 Engine.execute(sql) 執(zhí)行SQL請求的時候,才會建立真正的連接。因此 Engine 和 Pool 的行為稱之為延遲初始化,用現(xiàn)在流行的話來說就是延遲滿足感,等真正要派上用場的時候才去建立連接。
需要注意的是,創(chuàng)建引擎時,如果數(shù)據(jù)庫的密碼含有特殊字符,需要先編碼處理
>>> import urllib.parse
>>> urllib.parse.quote_plus("kx%jj5/g")
'kx%25jj5%2Fg'
其它數(shù)據(jù)庫方言初始化 engine 的方式可參考官方文檔
create_engine 還有很多可選參數(shù),這里介紹幾個重要的參數(shù)。
engine = create_engine('mysql://user:password@localhost:3306/test?charset=utf8mb4',
echo=False
pool_size=100,
pool_recycle=3600,
pool_pre_ping=True)
echo:為 True 時候會把sql語句打印出來,當(dāng)然,你可以通過配置logger來控制輸出,這里不做討論。
pool_size: 是連接池的大小,默認(rèn)為5個,0表示連接數(shù)無限制
pool_recycle: MySQL 默認(rèn)情況下如果一個連接8小時內(nèi)容沒有任何動作(查詢請求)就會自動斷開鏈接,出現(xiàn) MySQL has gone away的錯誤。設(shè)置了 pool_recycle 后 SQLAlchemy 就會在指定時間內(nèi)回收連接。如果設(shè)置為3600 就表示 1小時后該連接會被自動回收。
pool_pre_ping : 這是1.2新增的參數(shù),如果值為True,那么每次從連接池中拿連接的時候,都會向數(shù)據(jù)庫發(fā)送一個類似 select 1 的測試查詢語句來判斷服務(wù)器是否正常運(yùn)行。當(dāng)該連接出現(xiàn) disconnect 的情況時,該連接連同pool中的其它連接都會被回收。
參考鏈接:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。
總結(jié)
以上是生活随笔為你收集整理的python sql解析引擎_python SQLAlchemy 中的Engine详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ue4 classuobject没有成员
- 下一篇: python生成序列数(1-10)的立方