使用SQLAlchemy時資料庫連線池的問題

2021-07-09 12:02:07 字數 1054 閱讀 3793

在使用 create_engine建立引擎時,如果預設不指定連線池設定的話,一般情況下,sqlalchemy會使用乙個 queuepool繫結在新建立的引擎上。並附上合適的連線池引數。

在以預設的方法create_engine時(如下),就會建立乙個帶連線池的引擎。

engine = create_engine('postgresql:')

在這種情況下,當你使用了session後就算顯式地呼叫session.close(),也不能把連線關閉。連線會由queuepool連線池進行管理並復用。

這種特性在一般情況下並不會有問題,不過當資料庫伺服器因為一些原因進行了重啟的話。最初保持的資料庫連線就失效了。隨後進行的session.query()等方法就會丟擲異常導致程式出錯。

如果想禁用sqlalchemy提供的資料庫連線池,只需要在呼叫create_engine是指定連線池為nullpool,sqlalchemy就會在執行session.close()後立刻斷開資料庫連線。當然,如果session物件被析構但是沒有被呼叫session.close(),則資料庫連線不會被斷開,直到程式終止。

下面的**就可以避免sqlalchemy使用連線池:

#!/usr/bin/env python

#-*- coding: utf-8 -*-

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from sqlalchemy.pool import nullpool

engine = create_engine('postgresql:',

poolclass=nullpool)

session = sessionmaker(bind=engine)

session = session()

usr_obj_list = session.query(usrobj).all()

print usr_obj_list[0].id

session.close()

關於python使用sqlalchemy

sqlalchemy是python運算元據庫的乙個庫。能夠進行orm對映,sqlalchemy 採用簡單的python語言,為高效和高效能的資料庫訪問設計,實現了完整的企業級持久模型 sqlalchemy的理念是,sql資料庫的量級和效能重要於物件集合 而物件集合的抽象又重要於表和行。安裝sqlal...

使用SQLAlchemy來構建表

from datetime import datetime from flask sqlalchemy import sqlalchemy from sqlalchemy.dialects.mysql import tinyint,bigint,varchar,char,datetime,integ...

SQLAlchemy 使用 二 表關聯

在上一章中我們介紹了 sqlalchemy 建立基本表,但是一般情況下,表之間是有關聯的,比如 一對一 一對多 多對多,當然 sqlalchemy 是支援建立model時指定關係的 我們建立兩個表,vip和vip info,邏輯應該是一對一,我們先測試一對多 class vip base vip使用...