我正在我的网络项目中使用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()

我 for each 请求创建一个session = Session()对象,然后关闭它.我做的是对的还是有更好的方法?

推荐答案

建议阅读documentation:

提供了scoped_session()函数,该函数生成Session个对象的线程管理注册表.它通常用于Web应用程序中,因此可以使用单个全局变量来安全地表示具有对象集的事务性会话,这些对象集定位于单个线程.

简而言之,为了线程安全,请使用scoped_session().

Django相关问答推荐

如何使用Django';S生成的字段来统计相关对象?

在Django管理中仅显示外键的特定值

无法在 docker 启动Django项目

如何从Django';S模型中的方法中检索值?

如何在Django中显示文件大小

如何在 Django 中设置与 Session 相关的字段

身份验证有效,但登录无效.一直卡在pending

为什么 timezone.now 在作为默认值应用于 Django 中的 DateField 时显示future 日期

Django 和 HTML 无法从指定时间开始视频

基于每个条目的 Django Queryset 过滤

Django:无法从另一个应用程序导入模型

django-rest-framework 如何使模型序列化器字段成为必需

Django - 强制执行 ManyToManyField 唯一项

如何在django中生成临时文件然后销毁

使用 Python / Django 的 Google API 示例的 Oauth

如何动态检索 Django 模型类?

django-object-permissions Vs django-guardian Vs django-authority

django:TypeError:'tuple'对象不可调用

在 Django Admin 中过滤多对多框

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm