Python Werkzeug和SQLAlchemy 0.5x会话
更新: 通过Werkzeug教程,了解了如何使用sessionmaker()而不是建议的create_session()创建SQLAlchemy会话 注:这不是关于SA,而是关于Werkzeug Werkzeug教程:Python Werkzeug和SQLAlchemy 0.5x会话,python,sqlalchemy,werkzeug,Python,Sqlalchemy,Werkzeug,更新: 通过Werkzeug教程,了解了如何使用sessionmaker()而不是建议的create_session()创建SQLAlchemy会话 注:这不是关于SA,而是关于Werkzeug Werkzeug教程: session = scoped_session(lambda: create_session(bind=application.database_engine, autoflush=True, autocommit=False), local_manager.get_i
session = scoped_session(lambda: create_session(bind=application.database_engine,
autoflush=True, autocommit=False), local_manager.get_ident)
我问如何使用sessionmaker()实现同样的功能:
因此,来自#pocoo RCI的人帮助了我:
session = scoped_session(lambda: sessionmaker(bind=application.database_engine)(),
local_manager.get_ident)
如果在sessionmaker(**args)结束时没有(),它会不断给我一个错误:
RuntimeError:没有对象绑定到应用程序
注意:如果删除lambda,它将不起作用。
sessionmaker()
返回会话工厂,而不是会话本身scoped_session()
将会话工厂作为参数。因此,只需省略lambda:
并将sessionmaker()
的结果直接传递给scoped_session()
sessionmaker()
返回一个会话工厂,而不是会话本身scoped_session()
将会话工厂作为参数。因此,只需省略lambda:
并将sessionmaker()
的结果直接传递到scoped_session()
没有提到它,我正在玩Werkzeug lib和SA。我正在尝试采用SA sessionmaker()而不是SA教程建议的会话创建()。pocoo IRC的人帮了我,但我还是不明白到底是什么把戏。他们在sessionmaker()的末尾添加了“()”,现在它可以工作了。session=scoped_session(lambda:sessionmaker(bind=application.database_engine,autoflush=True,autocommit=False)),local_manager.get_ident)通过这种方式编写代码而不是听Ants Aasma,您为自己、代码读者和python解释器做了更多的工作。您还中断了您的范围会话
。您的代码创建一个sessionmaker
,然后调用它(返回一个会话),并将该会话以lambda形式传递给作用域_会话
。因此,每次作用域_session
尝试返回新会话时,它实际上返回相同的会话。省略lambda
,并从sessionmaker调用的末尾删除()scoped_会话(sessionmaker(*args))
没有提到它,我正在使用Werkzeug lib和SA。我正在尝试采用SA sessionmaker()而不是SA教程建议的会话创建()。pocoo IRC的人帮了我,但我还是不明白到底是什么把戏。他们在sessionmaker()的末尾添加了“()”,现在它可以工作了。session=scoped_session(lambda:sessionmaker(bind=application.database_engine,autoflush=True,autocommit=False)),local_manager.get_ident)通过这种方式编写代码而不是听Ants Aasma,您为自己、代码读者和python解释器做了更多的工作。您还中断了您的范围会话
。您的代码创建一个sessionmaker
,然后调用它(返回一个会话),并将该会话以lambda形式传递给作用域_会话
。因此,每次作用域_session
尝试返回新会话时,它实际上返回相同的会话。省略lambda
,并从sessionmaker调用的末尾删除()<代码>作用域会话(sessionmaker(*args))