使用sqlalchemy将未更改的对象提交到数据库是否很浪费?

时间:2018-06-21 01:21:44

标签: python database postgresql sqlalchemy

假设我的数据库内存中有一个对象,该对象是使用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中的某些对象将进行更改,而某些则不会。

这种提交多个未更改对象的过程是否很浪费,如果可以的话,有什么更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:1)

这样做的时候

user_object = database_session.query(User).first()

已加载的对象已在会话中。从the session tracks changes to the objectinstrumentationSession.add()Session.add_all()只会忽略会话中已经存在的对象,因此

objects_list.append(user_object)
database_session.add_all(objects_list)

至少是部分冗余。当您调用Session.commit()时,SQLAlchemy将首先将Session中保留的所有未决更改刷新到数据库,然后提交。换句话说,您不会提交任何“未更改的对象”。