我使用的是python2.7、Peewee和MySQL。我的程序从csv文件读取,如果csv中存在订单号,则更新字段。可以有2000-3000个更新,我用朴素的方法逐个更新记录,速度非常慢。我已经从使用peeweeupdate转移到了Raw query,这有点快。然而,它仍然非常缓慢。我想知道如何在不使用循环的情况下用更少的事务更新记录。在
def mark_as_uploaded_to_zoho(self, which_file):
print "->Started marking the order as uploaded to zoho."
with open(which_file, 'rb') as file:
reader = csv.reader(file, encoding='utf-8')
next(reader, None) ## skipping the header
for r in reader:
order_no = r[0]
query = '''UPDATE sales SET UploadedToZoho=1 WHERE OrderNumber="%s" and UploadedToZoho=0''' %order_no
SalesOrderLine.raw(query).execute()
print "->Marked as uploaded to zoho."
{a1}你可以使用这个限制来提高速度。这需要一个迭代器,该迭代器返回模型字段与字典键匹配的字典对象。在
根据要插入的记录数,您可以一次全部插入,也可以将其拆分成更小的块。在过去,我一次插入10000多条记录,但这可能会非常慢,这取决于数据库服务器和客户机规范,所以我将展示这两种方法。在
或者
^{pr2}$要获得更有效的“chunkify”迭代器的方法,请签出this question。在
通过简单地使用
with db.atomic
即可获得额外的加速,如here所示。在相关问题 更多 >
编程相关推荐