我在我的web項目中使用SQlAlchemy。我應該使用scoped_session(session_maker())或普通session_maker()以及爲什麼?或者我應該使用別的東西?scoped_session(session_maker())或普通session_maker()在sqlalchemy?
## model.py
from sqlalchemy import *
from sqlalchemy.orm import *
engine = create_engine('mysql://dbUser:[email protected]:dbPort/dbName',
pool_recycle=3600, echo=False)
metadata = MetaData(engine)
Session = scoped_session(sessionmaker())
Session.configure(bind=engine)
user = Table('user', metadata, autoload=True)
class User(object):
pass
usermapper = mapper(User, user)
## some other python file called abc.py
from models import *
def getalluser():
session = Session()
session.query(User).all()
session.flush()
session.close()
## onemore file defg.py
from models import *
def updateuser():
session = Session()
session.query(User).filter(User.user_id == '4').update({User.user_lname: 'villkoo'})
session.commit()
session.flush()
session.close()
我爲每個請求創建會話=會話()對象和我關閉它。我在做正確的事情還是有更好的方法來做到這一點?
謝謝。爲每個請求打開和關閉會話對象是否安全? – northlondoner
@northlondoner,不僅是它的安全,但它的推薦方式,請參閱http://www.sqlalchemy.org/docs/orm/session.html#lifespan-of-a-contextual-session –
@DanielKluev,這就是一個長的頁面,從你的評論開始已經過去了一段時間,所以也許我讀了錯誤的東西或者頁面已經改變了,但是看起來頁面看起來正好相反。對我來說,「不這樣做」的代碼示例看起來與OP代碼示例中使用的模式非常相似,其中爲每個數據庫請求創建一個新的會話。這是一個混合的術語問題(網頁請求vs數據庫請求)還是我缺少的兩個片段之間有一些區別? – mmitchell