2

据我了解,使用标准MySQLdb驱动程序时,您通常会使用一条with语句来确保使用__exit__.

是否有with我需要 SQLAlchemysessions或可能的等效语句engine?或者对于 SQLAlchemy,关闭连接的手动超时是否足够?

4

2 回答 2

1

您正在寻找的短语是“上下文管理器”,它是一个遵守需要在with语句中使用的属性命名约定的对象。请参阅文档中的“使用引擎”以使用上下文管理器进行引擎连接:

with engine.begin() as connection:
    r1 = connection.execute(table1.select())
    connection.execute(table1.insert(), col1=7, col2='this is some data')

据我所知,Session 对象本身没有这样的功能。

于 2013-06-13T18:19:22.277 回答
1

这是来自文档的引用:

大多数 Web 框架都包括用于建立与请求相关联的单个 Session 的基础设施,该 Session 会在请求结束时正确构建和拆除相应的拆除。此类基础设施部分包括 Flask-SQLAlchemy 等产品,用于与 Flask Web 框架结合使用,以及 Zope-SQLAlchemy,用于与 Pyramid 和 Zope 框架结合使用。SQLAlchemy 强烈建议尽可能使用这些产品。

在集成库不可用的情况下,SQLAlchemy 包含自己的“帮助”类,称为 scoped_session。

所以,看起来scoped_session就是你在说的。关于如何使用作用域会话的文档非常好。基本上,您定义何时打开会话以及何时关闭它(请参阅使用自定义创建的范围):

from my_web_framework import get_current_request, on_request_end
from sqlalchemy.orm import scoped_session, sessionmaker

Session = scoped_session(sessionmaker(bind=some_engine), scopefunc=get_current_request)

@on_request_end
def remove_session(req):
    Session.remove()

希望有帮助。

于 2013-06-13T18:04:48.523 回答