为什么即使提交删除后user.id仍保留值?

时间:2019-02-21 19:19:40

标签: sqlalchemy

所以我添加了用户:

john = User(name='John') 

mary = User(name='Mary')

session.add([john, mary])

session.commit()

mary = s.query(User).filter(User.name == 'Mary').one()

mary.id

输出:2

session.delete(mary)
session.commit()

mary.id

输出:2

  • 为什么剩下2个?

如果有帮助,我正在研究pythoncentral.io上的教程

https://www.pythoncentral.io/understanding-python-sqlalchemy-session/

1 个答案:

答案 0 :(得分:1)

该对象不再位于数据库中,您只是在仍与mary连接的对象上调用一个值。

我想不出为什么您需要对此做任何特别的事情。您已经完成了对象,对不对?忽略它。 mary.id的值只是它在数据库中以前的存在的反映。

但是,如果您想继续使用mary对象,也许在没有原始ID的情况下重新提交,则必须使用make_transient()

from sqlalchemy.orm.session import make_transient

make_transient(mary)

现在,您可以将mary读入数据库并重新提交。她会保留她原来的身份证号,但是您可以通过在阅读并重新提交之前设置mary.id = None来轻松地防止该错误。