Werkzeug 和 SQLAlchemy 0.5x 会话

0 投票
1 回答
967 浏览
提问于 2025-04-15 14:25

更新:

在学习Werkzeug的教程时,我在使用sessionmaker()创建SQLAlchemy会话时遇到了问题,而不是使用推荐的create_session()。

注意:这不是关于SA(SQLAlchemy),而是关于Werkzeug。

Werkzeug教程:

session = scoped_session(lambda: create_session(bind=application.database_engine,
    autoflush=True, autocommit=False), local_manager.get_ident)

我问如何用sessionmaker()来实现同样的功能:

结果#pocoo的朋友们帮了我:

session = scoped_session(lambda: sessionmaker(bind=application.database_engine)(),
    local_manager.get_ident)

在sessionmaker(**args)后面没有()时,它一直给我报错:

运行时错误:没有对象绑定到应用程序

附注:如果删除lambda,它将无法工作。

1 个回答

4

sessionmaker() 返回的是一个会话工厂,而不是一个具体的会话。scoped_session() 需要一个会话工厂作为参数。所以只需要去掉 lambda:,直接把 sessionmaker() 的结果传给 scoped_session() 就可以了。

撰写回答