在解析/修改别人代码的过程中,同步脚本时同步依赖实体(Person-Child)时出现错误。显然,出现了这样一种情况,它session.add(person)
试图将先前被同步器删除的 orm-Child 对象添加到数据库中:
session.add(person)
File "/home/web/portal/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1559, in add
self._save_or_update_state(state)
File "/home/web/portal/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1578, in _save_or_update_state
self._save_or_update_impl(st_)
File "/home/web/portal/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1828, in _save_or_update_impl
self._update_impl(state)
File "/home/web/portal/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1814, in _update_impl
state_str(state)
InvalidRequestError: Instance '<Child at 0xec10afec>' has been deleted. Use the make_transient() function to send this object back to the transient state.
标记一个对象是什么意思
make_transient()
——在这样的上下文中应该如何以及为什么要使用它?在代码过程中,还使用了另一种单次请求删除对象的策略:through
.delete()
。问题是在此类请求中提供什么以及何时使用标志synchronize_session
?
session.query(Child).filter(Child.id==child.id).delete(synchronize_session=False)