我在循环中使用SQLAlchemy进行批量插入,如下所示:
for table, batch in pendingInserts:
self.conn.execute(table.insert(), batch)
其中batch
是dict
的列表,table
是SQLAlchemy表。第一批插入成功执行,但在后续迭代中,同一表上的插入失败,并出现以下错误:
StatementError: A value is required for bind parameter 'security_exchange', in parameter group 45 (original cause: InvalidRequestError: A value is required for bind parameter 'security_exchange', in parameter group 45) u'INSERT INTO .....
此处security_exchange
在DB(PostgreSQL)中是可为空的列,因此它不是强制性的,在批处理中的所有条目中都被省略。我很困惑为什么它成功第一次批量插入但在同一个表上第二次插入失败。同样对于同一个表,所有批次中提供的列数始终保持相同。
答案 0 :(得分:6)
批量插入需要所有项目都为批次中的所有项目提供相同的列集。在我的情况下,批量中的一些项目会跳过一些可选列(具有默认值)。