Django:使用executemany和MySQL自定义原始SQL插入

时间:2010-11-28 18:29:00

标签: sql mysql django insert

我需要将大量数据上传到MySQL数据库。对于大多数模型,我使用django的ORM,但我的一个模型将有数十亿(!)的实例,我想优化其插入操作。

我似乎无法找到使executemany()工作的方法,在谷歌搜索之后,似乎几乎没有例子。

我正在寻找正确的sql语法+正确的命令语法+正确的值数据结构,以支持以下sql语句的executemany命令:

INSERT INTO `some_table` (`int_column1`, `float_column2`, `string_column3`, `datetime_column4`) VALUES (%d, %f, %s, %s)

是的,我明确说明了id(int_column1)的效率。

一个简短的示例代码将是伟大的

4 个答案:

答案 0 :(得分:18)

这是一个实际使用executemany()的解决方案!

基本上,示例here中的想法可行。

但请注意,在Django中,您需要使用%s占位符而不是问号。

此外,您还需要管理交易。我不会在这里讨论,因为有大量文档可供使用。

from django.db import connection,transaction
cursor = connection.cursor()



query=''' INSERT INTO table_name 
        (var1,var2,var3) 
        VALUES (%s,%s,%s) '''


queryList=buildQueryList() 

#here buildQueryList() represents some function to populate
#the list with multiple records
#in the tuple format (value1,value2,value3).


cursor.executemany(query,queryList)

transaction.commit()

答案 1 :(得分:1)

你是否真的建议通过一些ORM数据访问层加载数十亿行(对不起实例) - 你有多长时间?

如果可能,

批量加载 - http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 2 :(得分:1)

如果您需要修改数据,请将load data批量加载到临时表中。然后使用insert into select命令应用修改。 IME,这是迄今为止将大量数据放入表中的最快方法。

答案 3 :(得分:0)

我不确定如何使用executemany()命令,但你可以use a single SQL INSERT statement to insert multiple records