Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我使用pyramid_tm时,即使expire_on_commit=False,会话也会过期_Python_Transactions_Pyramid - Fatal编程技术网

Python 当我使用pyramid_tm时,即使expire_on_commit=False,会话也会过期

Python 当我使用pyramid_tm时,即使expire_on_commit=False,会话也会过期,python,transactions,pyramid,Python,Transactions,Pyramid,正如标题所说。我只想在session.add之后从会话中获取返回id(自动生成主键)。如果我在不使用pyramid_tm的情况下手动提交事务,一切都很好,但是当我开始使用pyramid_tm时,它似乎忽略了expire_on_commit。有什么建议吗?它不会忽略提交时过期,只是在代码运行后事务才会提交,所以需要刷新。我就是这样做的: thing = Thing() Session.add(thing) Session.flush() Session.refresh(thing) print t

正如标题所说。我只想在session.add之后从会话中获取返回id(自动生成主键)。如果我在不使用pyramid_tm的情况下手动提交事务,一切都很好,但是当我开始使用pyramid_tm时,它似乎忽略了expire_on_commit。有什么建议吗?

它不会忽略提交时过期,只是在代码运行后事务才会提交,所以需要刷新。我就是这样做的:

thing = Thing()
Session.add(thing)
Session.flush()
Session.refresh(thing)
print thing.id

是的,现在可以用了,谢谢。虽然您可以在session.flush之后获得您的id,但我认为您可以使用session.refresh来确保;SQLAlchemy已经知道id尚未设置,并将在刷新后自动对其进行批处理。请注意,事务提交不是一个因素:id由SQL server分配,因此只有在INSERT语句发送到服务器后才可用。SQLAlchemy通常在执行后续查询时自动执行刷新,但也可以在需要时通过执行session.flush()强制执行刷新,如mattjbray所示。