2

我正在尝试使用 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 上的最新版本。

我怀疑这是一个错误。

4

0 回答 0