欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python SQLAlchemy 中的Engine詳解

 更新時間:2019年07月04日 10:20:08   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了python SQLAlchemy 中的Engine詳解,Engine 翻譯過來就是引擎的意思,汽車通過引擎來驅(qū)動,而 SQLAlchemy 是通過 Engine 來驅(qū)動,Engine 維護了一個連接池(Pool)對象和方言(Dialect),需要的朋友可以參考下

先看這張圖,這是從官方網(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中的其它連接都會被回收。

參考鏈接:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)

    python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)

    這篇文章主要介紹了python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python實現(xiàn)大轉(zhuǎn)盤抽獎效果

    python實現(xiàn)大轉(zhuǎn)盤抽獎效果

    這篇文章主要為大家詳細介紹了python實現(xiàn)大轉(zhuǎn)盤抽獎效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python加載數(shù)據(jù)的5種不同方式(收藏)

    Python加載數(shù)據(jù)的5種不同方式(收藏)

    這篇文章主要介紹了Python加載數(shù)據(jù)的5種不同方式(收藏),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python中的getopt函數(shù)使用詳解

    Python中的getopt函數(shù)使用詳解

    這篇文章主要介紹了Python中的getopt函數(shù)使用詳解,是Python進階學(xué)習(xí)中的重要知識,需要的朋友可以參考下
    2015-07-07
  • python使用time、datetime返回工作日列表實例代碼

    python使用time、datetime返回工作日列表實例代碼

    這篇文章主要介紹了python使用time、datetime返回工作日列表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 如何使用Python讀取xml文件

    如何使用Python讀取xml文件

    這篇文章主要介紹了如何使用Python讀取xml文件,關(guān)于python讀取xml文章很多,但大多文章都是貼一個xml文件,然后再貼個處理文件的代碼希望這篇文章可以更通俗易懂的教如何使用python 來讀取xml 文件
    2023-04-04
  • Python 自動備份腳本的示例代碼

    Python 自動備份腳本的示例代碼

    這篇文章主要介紹了Python 自動備份腳本,本文結(jié)合代碼給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 深入理解Python虛擬機中列表(list)的實現(xiàn)原理及源碼剖析

    深入理解Python虛擬機中列表(list)的實現(xiàn)原理及源碼剖析

    在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機當(dāng)中針對列表的實現(xiàn),在?Python?中,List?是一種非常常用的數(shù)據(jù)類型,可以存儲任何類型的數(shù)據(jù),并且支持各種操作,如添加、刪除、查找、切片等,在本篇文章當(dāng)中將深入去分析這一點是如何實現(xiàn)的
    2023-03-03
  • Python+wxPython實現(xiàn)一個簡單的音樂播放器

    Python+wxPython實現(xiàn)一個簡單的音樂播放器

    這篇文章主要為大家詳細介紹了如何使用Python編程語言和wxPython模塊創(chuàng)建一個簡單的音樂播放器,文中的示例代碼講解詳細,感興趣的可以了解下
    2023-09-09
  • python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實例

    python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實例

    這篇文章主要介紹了python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實例,需要的朋友可以參考下
    2020-03-03

最新評論