sqlalchemy和最后一个插入id req=测试() 设置属性(要求“测试”,1); 会话添加(req) 打印请求id

sqlalchemy和最后一个插入id req=测试() 设置属性(要求“测试”,1); 会话添加(req) 打印请求id,sqlalchemy,Sqlalchemy,如何获取req对象的最后一个id?您应该首先提交它(在会话之后。添加(req))。您应该首先提交它(在会话之后。添加(req))。如果在最终打印语句之前执行会话。提交(),则将设置id属性。如前所述,引擎没有理由执行任何SQL查询,因此对象尚未插入。一旦查询运行(在会话刷新或提交时),ID就会出现。如果在最终打印语句之前执行session.commit(),则会设置ID属性。如前所述,引擎没有理由执行任何SQL查询,因此对象尚未插入。一旦查询运行(在会话刷新或提交时),ID就会出现。flush(

如何获取req对象的最后一个id?

您应该首先提交它(在
会话之后。添加(req)
)。

您应该首先提交它(在
会话之后。添加(req)
)。

如果在最终打印语句之前执行会话。提交(),则将设置id属性。如前所述,引擎没有理由执行任何SQL查询,因此对象尚未插入。一旦查询运行(在会话刷新或提交时),ID就会出现。

如果在最终打印语句之前执行session.commit(),则会设置ID属性。如前所述,引擎没有理由执行任何SQL查询,因此对象尚未插入。一旦查询运行(在会话刷新或提交时),ID就会出现。

flush()足够了,它将执行查询并填充自动ID。

flush()足够了,它将执行查询并填充自动ID。

但是我想在一个事务中的其他表中插入req.ID。然后,您应该使用关系数据库布局。阅读当然,您可以尝试选择表中的最大索引(
selectmax(id)fromtable
),您的对象的索引应该是这个最大索引+1,但是它不是真正安全的-它可能会导致竞争条件(想象两个这样的脚本同时运行)。但我想在一个事务的其他表中插入req.id。然后您应该使用关系数据库布局。阅读当然,您可以尝试选择表中的最大索引(
selectmax(id)fromtable
),您的对象的索引应该是这个最大索引+1,但是它不是真正安全的-它可能会导致竞争条件(想象两个这样的脚本同时运行)。 req = Test() setattr(req, 'test', 1); session.add(req) print req.id