【问题标题】:sqlalchemy change with executemany from version 0.5 to 0.7sqlalchemy 从版本 0.5 更改为 0.7
【发布时间】:2012-06-18 19:08:16
【问题描述】:
我正在尝试收集字典列表,并使用 sqlalchemy 将批量插入到 mysql 数据库中。
根据these docs for version 0.5,您可以通过调用connection 对象的executemany 函数来执行此操作。这是我唯一能找到executemany 存在的地方。
但是,在these docs for 0.7中,我发现即使引用了executemany,他们并没有在代码sn-p中使用它,事实上,它在@987654326中已经不存在了@类。
这两个函数好像是合并的,但是如果合并的话,connection.execute方法和session.execute方法有什么不同呢?在文档中似乎session.execute 不支持批量插入,那么如何将数千个字典插入到一个表中?
【问题讨论】:
标签:
python
mysql
sqlalchemy
bulkinsert
【解决方案1】:
我认为您误读了 0.5 链接,您指向的示例仍然使用“execute()”。 SQLAlchemy 从未公开过明确的 executemany() 方法。 executemany() 是底层 DBAPI 的特定函数,如果给定参数集被检测为参数列表,SQLAlchemy 将使用该函数。
session.execute() 支持与connection.execute() 相同的功能,除了参数列表是使用命名参数“params”给出的。文档字符串没有明确说明这一点,可能应该进行调整。
您还可以使用session.connection() 方法从Session 获取特定于事务的Connection 对象。
【讨论】:
-
你说得对,应该是用execute many方法。但是,mysqldb 中有一个bug,我遇到了。我试图迁移到我们的sql,但到目前为止没有运气。
-
快速更新以防其他人看到这一点,从我看到的here 来看,sqlalchemy 中的oursql 包装器实际上似乎不支持executemany。 Oursql 可以,但 sqlalchemy 似乎没有正确设置它。