sqlalchemy中的作用域会话(sessionmaker())或纯sessionmaker()?

2024-05-18 10:09:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的web项目中使用SQlAlchemy。我应该使用-scoped_session(sessionmaker())或普通的sessionmaker()-为什么?或者我应该用别的东西吗?

## model.py
from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine('mysql://dbUser:dbPassword@dbServer: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()

我为每个请求创建一个session = Session()对象并关闭它。我做的是对的还是有更好的方法?


Tags: frompyimportsqlalchemymodelssessiondefengine
1条回答
网友
1楼 · 发布于 2024-05-18 10:09:06

建议阅读documentation

the scoped_session() function is provided which produces a thread-managed registry of Session objects. It is commonly used in web applications so that a single global variable can be used to safely represent transactional sessions with sets of objects, localized to a single thread.

简而言之,使用scoped_session()来保证线程安全。

相关问题 更多 >