假设我的数据库内存中有一个对象,该对象是使用sqlalchemy这样检索的:
user_object = database_session.query(User).first()
我对此对象做了一些检查,没有做任何更改,例如这样(对于本示例,我的user_object
的name属性等于“ John”):
if user_object.name == "John":
do nothing
else:
do something
然后我将此对象添加到一个列表,该列表将立即提交给数据库,并牢记以下操作:
objects_list.append(user_object)
database_session.add_all(objects_list)
database_session.commit()
objects_list
中的某些对象将进行更改,而某些则不会。
这种提交多个未更改对象的过程是否很浪费,如果可以的话,有什么更好的方法来处理这种情况?
答案 0 :(得分:1)
这样做的时候
user_object = database_session.query(User).first()
已加载的对象已在会话中。从the session tracks changes to the object到instrumentation。 Session.add()
和Session.add_all()
只会忽略会话中已经存在的对象,因此
objects_list.append(user_object)
database_session.add_all(objects_list)
至少是部分冗余。当您调用Session.commit()
时,SQLAlchemy将首先将Session
中保留的所有未决更改刷新到数据库,然后提交。换句话说,您不会提交任何“未更改的对象”。