0%

SQLAlchemy 分离对象

1
2
3
4
5
6
7
8
i = session.query(Model)
session.expunge(i)

old_id = i.id
i.id = None
session.add(i)
session.flush()
print(i.id) #New ID

修改从 SQLAlchemy 查询出来的模型会提交的缓冲里, 例如上述代码会导致查询出来的模型id被修改为None

如何分离一份模型出来使其修改不影响数据库的提交?

可以使用make_transient()函数

1
from sqlalchemy.orm import make_transient
1
2
3
4
5
6
7
8
inst = session.query(Model).first()
session.expunge(inst)

make_transient(inst)
inst.id = None
session.add(inst)
session.flush()
print(inst.id) #New ID

参考链接

https://docs.sqlalchemy.org/en/14/orm/session_api.html?highlight=make_transient#sqlalchemy.orm.make_transient
https://qa.1r1g.com/sf/ask/1024533471/