擅长:python、mysql、java
<p>默认情况下,SQLite使用自动提交模式。这允许省略<code>begin transaction</code>。但是这里我们希望所有的插入都在一个事务中,唯一的方法就是用<code>begin transaction</code>启动一个事务,这样所有要运行的语句都在该事务中。在</p>
<p>方法<code>executemany</code>只是在Python外部对<code>execute</code>执行的循环,它只调用SQLite prepare语句函数一次。在</p>
<p>以下是从列表中删除最后N项的一种非常糟糕的方法:</p>
<pre><code> templist = []
i = 0
while i < self.bulk_insert_entries and len(urls) > 0:
templist.append(urls.pop())
i += 1
</code></pre>
<p>最好这样做:</p>
^{pr2}$
<p>切片和del切片甚至可以在空列表上工作。在</p>
<p>两者的复杂度可能相同,但100K次append和pop调用的成本远高于让Python在解释器之外执行。在</p>