executemany()如何工作

时间:2014-08-21 13:36:02

标签: sqlite executemany

我一直在使用c ++并使用sqlite。在python中,我在库中有一个executemany操作,但我正在使用的c ++库没有那个操作。

我想知道executemany操作如何优化查询以使它们更快。

我正在查看sqlite c / c ++ api,看到有两个命令,sqlite3_reset和sqlite3_clear_bindings,可用于清除和重用预准备语句。

这是python对批处理和加速执行查询(至少对于插入)的作用吗?谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

executemany只是绑定参数,执行语句,并在循环中调用sqlite3_reset

Python在准备好后不会直接访问该语句,因此这是重用它的唯一方法。 但是,SQLite不需要花费太多时间来准备语句,因此这不太可能对性能产生太大影响。

性能最重要的是在事务中批处理语句; Python试图变得聪明并且to do this automatically(独立于executemany)。

答案 1 :(得分:0)

我查看了一些相关的帖子,发现了有关如何改进sqlite批量插入性能的详细信息。这些原则可以有效地用于创建executemany函数。

Improve INSERT-per-second performance of SQLite?

最大的改进变化确实是@CL。说,把它变成一个交易。另一篇文章的作者通过使用和重用预备语句并使用一些pragma设置也发现了显着的改进。