我使用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读取到一个列表中,每次读取1000行。
发布于 2009-06-16 14:54:47
回顾而言,这是一个非常愚蠢但很难发现的错误。值是sql中的一个关键字,因此表名值需要它周围的引号。
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into `values` (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()发布于 2009-06-10 11:02:20
您收到的消息表明,在executemany()方法中,有一个转换失败。检查values列表中是否有大于3的元组。
为了进行快速核查:
max(map(len, values))如果结果大于3,则使用筛选器定位您的坏元组:
[t for t in values if len(t) != 3]或者,如果您需要索引:
[(i,t) for i,t in enumerate(values) if len(t) != 3]https://stackoverflow.com/questions/974702
复制相似问题