我想在插入查询中输入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()
有人可以告诉我这里我做错了吗
答案 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 (?)"