我正在尝试使用 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 上的最新版本。
我怀疑这是一个错误。