python SQLAlchemy 中的Engine詳解
先看這張圖,這是從官方網(wǎng)站扒下來的。
Engine 翻譯過來就是引擎的意思,汽車通過引擎來驅(qū)動,而 SQLAlchemy 是通過 Engine 來驅(qū)動,Engine 維護了一個連接池(Pool)對象和方言(Dialect)。方言簡單而言就是你連的到底是 MySQL 還是 Oracle 或者 PostgreSQL 還是其它數(shù)據(jù)庫,關(guān)于方言(Dialect)的介紹在另外一篇文章有介紹,可參考數(shù)據(jù)庫方言dialect。
連接池很重要,因為每次發(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: 是連接池的大小,默認為5個,0表示連接數(shù)無限制
pool_recycle: MySQL 默認情況下如果一個連接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ù)器是否正常運行。當(dāng)該連接出現(xiàn) disconnect 的情況時,該連接連同pool中的其它連接都會被回收。
參考鏈接:
- https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls
- https://stackoverflow.com/questions/34322471/sqlalchemy-engine-connection-and-session-difference
- https://docs.sqlalchemy.org/en/13/core/pooling.html#dealing-with-disconnects
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于sqlalchemy對mysql實現(xiàn)增刪改查操作
- 基于SQLAlchemy實現(xiàn)操作MySQL并執(zhí)行原生sql語句
- python數(shù)據(jù)庫操作mysql:pymysql、sqlalchemy常見用法詳解
- python orm 框架中sqlalchemy用法實例詳解
- python使用SQLAlchemy操作MySQL
- Python SQLAlchemy入門教程(基本用法)
- python SQLAlchemy的Mapping與Declarative詳解
- Python流行ORM框架sqlalchemy安裝與使用教程
- python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實例
- Python_查看sqlite3表結(jié)構(gòu),查詢語句的示例代碼
- python使用sqlite3時游標(biāo)使用方法
- Python SQLite3簡介
- Python使用flask框架操作sqlite3的兩種方式
- python與sqlite3實現(xiàn)解密chrome cookie實例代碼
- Python SQLite3數(shù)據(jù)庫日期與時間常見函數(shù)用法分析
- Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內(nèi)置數(shù)據(jù)庫SQLite3的方法
- Python開發(fā)SQLite3數(shù)據(jù)庫相關(guān)操作詳解【連接,查詢,插入,更新,刪除,關(guān)閉等】
- Python sqlite3事務(wù)處理方法實例分析
- Python簡單操作sqlite3的方法示例
- Python3+SQLAlchemy+Sqlite3實現(xiàn)ORM教程
相關(guān)文章
python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)
這篇文章主要介紹了python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2016-03-03Python加載數(shù)據(jù)的5種不同方式(收藏)
這篇文章主要介紹了Python加載數(shù)據(jù)的5種不同方式(收藏),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python使用time、datetime返回工作日列表實例代碼
這篇文章主要介紹了python使用time、datetime返回工作日列表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05深入理解Python虛擬機中列表(list)的實現(xiàn)原理及源碼剖析
在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機當(dāng)中針對列表的實現(xiàn),在?Python?中,List?是一種非常常用的數(shù)據(jù)類型,可以存儲任何類型的數(shù)據(jù),并且支持各種操作,如添加、刪除、查找、切片等,在本篇文章當(dāng)中將深入去分析這一點是如何實現(xiàn)的2023-03-03Python+wxPython實現(xiàn)一個簡單的音樂播放器
這篇文章主要為大家詳細介紹了如何使用Python編程語言和wxPython模塊創(chuàng)建一個簡單的音樂播放器,文中的示例代碼講解詳細,感興趣的可以了解下2023-09-09python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實例
這篇文章主要介紹了python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實例,需要的朋友可以參考下2020-03-03