我正在尝试使用sqlalchemy进行批量更新。
什么工作,选择要更新的对象,然后在with session.begin_nested():
语句中设置属性。但是,实际保存所需的时间很慢。
当我尝试通过session.bulk_save_objects
或session.bulk_update_mappings
使用批量操作时,我遇到以下异常:
A value is required for bind parameter 'schema_table_table_id'
[SQL: u'UPDATE schema.table SET updated_col=%(updated_col)s
WHERE schema.table.table_id = %(schema_table_table_id)s']
[parameters: [{'updated_col': 'some_val'}]]
看起来bulk_save_objects
使用与bulk_update_mappings
相同的逻辑路径。
我实际上甚至不了解bulk_update_mappings
应该如何工作,因为您提供了更新的值和引用类,但是列表中缺少与这些值关联的主键。这基本上似乎是问题。我尝试使用bulk_update_mappings
并提供了用于主键参数的生成的字典键(在我的示例中为schema_table_table_id
),它最终被忽略了。如果我改为使用id
属性名称,它将更新生成的SQL中的主键,但仍未在where子句中提供所需的参数。
这是使用SQLAlchemy 1.0.12,这是pip上的最新版本。
我怀疑这是一个错误。