Python SQLAlchemy批量更新查询因AttributeError失败

Python SQLAlchemy批量更新查询因AttributeError失败,python,orm,sqlalchemy,flask-sqlalchemy,bulkupdate,Python,Orm,Sqlalchemy,Flask Sqlalchemy,Bulkupdate,以下是我拥有的模型和关系配置(不是一个实际示例) 即使它在会议结束后仍然有效 >> db_session.close() >>> db_session.query(models.Address).filter_by(my_user=user).update(values=dict(email='test3@test3.test3')) 更新查询是否有问题?为什么它在其他情况下有效?这是在SQLAlchemy

以下是我拥有的模型和关系配置(不是一个实际示例)

即使它在会议结束后仍然有效

>> db_session.close()
>>> db_session.query(models.Address).filter_by(my_user=user).update(values=dict(email='test3@test3.test3'))
更新查询是否有问题?为什么它在其他情况下有效?

这是在SQLAlchemy<1.2.x中:

当主键/外键列的属性名称与列的实际名称不匹配时,
Query.update()
Query.delete()
使用的“评估”策略现在可以适应从多对一关系到实例的简单对象比较。以前,这将进行简单的基于名称的匹配,并以
AttributeError
失败

最简单的解决方案是在执行批量操作时升级或避免使用“评估”策略:

db_session.query(models.Address).\
    filter_by(my_user=user).\
    update(values=dict(email='test3@test3.test3'),
           synchronize_session=False)
# ... or 'fetch'
这是在SQLAlchemy<1.2.x中:

当主键/外键列的属性名称与列的实际名称不匹配时,
Query.update()
Query.delete()
使用的“评估”策略现在可以适应从多对一关系到实例的简单对象比较。以前,这将进行简单的基于名称的匹配,并以
AttributeError
失败

最简单的解决方案是在执行批量操作时升级或避免使用“评估”策略:

db_session.query(models.Address).\
    filter_by(my_user=user).\
    update(values=dict(email='test3@test3.test3'),
           synchronize_session=False)
# ... or 'fetch'

SQLA的哪个版本?它是
1.1.14
,psycopg2.7.1`看起来像个bug。该版本可复制,例如1.2.8。非常好,谢谢!!SQLA的哪个版本?它是
1.1.14
,psycopg2.7.1`看起来像个bug。该版本可复制,例如1.2.8。非常好,谢谢!!
db_session.query(models.Address).\
    filter_by(my_user=user).\
    update(values=dict(email='test3@test3.test3'),
           synchronize_session=False)
# ... or 'fetch'