使用python列表在postgres中插入数据

时间:2014-04-03 04:42:09

标签: python postgresql

我想在插入查询中输入python列表并将数据输入postgres,我使用executemany但仍然收到错误“TypeError:并非在字符串格式化期间转换所有参数”

twitter_data = ['eOc6ZEQiNCo', u'TYihcUfotnM', u'7vneoA-vY8U', '73RRIEXsdyE']    
query = "INSERT INTO videograbber (video_id) VALUES (%s)"   
cur.executemany("INSERT INTO videograbber (video_id) VALUES (%s)",[twitter_data])
con.commit()

有人可以告诉我这里我做错了吗

2 个答案:

答案 0 :(得分:1)

您的列表必须是元组的列表。

您还没有显示twitter_data的价值,但我怀疑它是一个字符串。

你想要这样的东西:

twitter_data = [ ('video_id_1',), ('video_id_2',) ]

注意尾随逗号,制作这些1元组,而不只是表达式周围的括号。这是包含(str)的1元组的2元素列表,因此当psycopg2迭代列表中的元组时,它会获得每个元组预期的一个元素。

如果你刚写了[ ('video_id_1'), ('video_id_2') ],你就会生成一个包含两个str个对象的2元素列表。这些是可迭代的,因此psycopg2将尝试迭代它们,将每个字符转换为查询参数。它将具有比字符更少的参数,因此它会产生您显示的错误。

您可以使用列表推导将str列表转换为str的1元组列表,例如:

twitter_data_tuples = [ (x,) for x in twitter_data ]

答案 1 :(得分:0)

您使用"INSERT INTO videograbber (video_id) VALUES (%s)",但%s是格式标记。应该是"INSERT INTO videograbber (video_id) VALUES (?)"

之类的东西