在使用 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使用...