Roe*_*ler 11 python mysql sql django insert
我有一个数据库表,其中包含唯一的字符串字段和几个整数字段.字符串字段通常为10-100个字符长.
每分钟左右我都有以下场景:我收到一个与表的记录结构相对应的2-10万个元组的列表,例如
[("hello", 3, 4), ("cat", 5, 3), ...]
Run Code Online (Sandbox Code Playgroud)
我需要将所有这些元组插入到表中(假设我验证这些字符串都不会出现在数据库中).为了澄清,我正在使用InnoDB,并且我有一个自动增量主键用于此表,字符串不是PK.
我的代码当前遍历此列表,因为每个元组都会创建一个具有适当值的Python模块对象,并调用".save()",如下所示:
@transaction.commit_on_success
def save_data_elements(input_list):
for (s, i1, i2) in input_list:
entry = DataElement(string=s, number1=i1, number2=i2)
entry.save()
Run Code Online (Sandbox Code Playgroud)
此代码目前是我系统中的性能瓶颈之一,因此我正在寻找优化它的方法.
例如,我可以生成SQL代码,每个代码包含100个元组的INSERT命令(在SQL中"硬编码")并执行它,但我不知道它是否会改进任何东西.
您有什么建议来优化这样的过程吗?
谢谢
Nad*_*mli 11
您可以使用"field1","field2",..格式将行写入文件,然后使用LOAD DATA加载它们
data = '\n'.join(','.join('"%s"' % field for field in row) for row in data)
f= open('data.txt', 'w')
f.write(data)
f.close()
Run Code Online (Sandbox Code Playgroud)
然后执行:
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
Run Code Online (Sandbox Code Playgroud)