【发布时间】:2010-11-01 18:16:28
【问题描述】:
我正在使用 Python 及其 MySQLdb 模块将一些测量数据导入 Mysql 数据库。我们拥有的数据量非常大(目前大约有 250 MB 的 csv 文件,未来还会有更多)。
目前我使用 cursor.execute(...) 来导入一些元数据。这没有问题,因为这些条目只有几个。
问题是当我尝试使用 cursor.executemany() 导入大量的实际测量数据时,MySQLdb 引发了一个
TypeError: not all arguments converted during string formatting
我当前的代码是
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into values (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()
其中values 是一个元组列表,每个元组包含三个字符串。有什么想法可能有什么问题吗?
编辑:
这些值是由
生成的yield (prefix + row['id'], row['value'], sample_id)
然后一次读入一千个列表,其中行和迭代器来自csv.DictReader。
【问题讨论】:
-
您是否验证过 values 包含正确的数据?顺便说一句,您应该考虑使用 LOAD LOCAL DATA INFILE。它可以更快。
-
问题是需要对数据进行预处理(目前在同一个 python 脚本中完成),创建如此大数据集的冗余副本不是很可行。这些值应该没问题,因为我用调试器检查过。
标签: python mysql executemany