【发布时间】:2010-10-25 09:46:45
【问题描述】:
我有一个带有唯一字符串字段和几个整数字段的数据库表。字符串字段的长度通常为 10-100 个字符。
每分钟左右一次我有以下情况:我收到一个与表的记录结构相对应的 2-10,000 个元组的列表,例如
[("hello", 3, 4), ("cat", 5, 3), ...]
我需要将所有这些元组插入到表中(假设我验证了这些字符串都没有出现在数据库中)。为了澄清起见,我使用的是 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()
此代码目前是我系统中的性能瓶颈之一,因此我正在寻找优化它的方法。
例如,我可以生成每个包含 100 个元组的 INSERT 命令的 SQL 代码(“硬编码”到 SQL 中)并执行它,但我不知道它是否会改进。
您对优化这样的流程有什么建议吗?
谢谢
【问题讨论】:
-
好问题!那么,最好的答案似乎是创建一个文本文件,或者通过字符串连接生成一个 SQL 查询?这有点不满意!
标签: python sql mysql django insert