我知道这一点,并试图在python中将数据插入到这个postgres表中,如下所示:
cur.execute('''INSERT INTO trademarks_image_mark (trademarks_id, image_mark_id)
SELECT currval('trademarks_id_seq'), id FROM image_mark WHERE
image_file_name LIKE %s''', data['ImageFileName'])
..但我继续犯这个错误:
TypeError:并非在字符串格式化期间转换所有参数
有谁知道为什么会这样?我知道如何使用常规Insert转换为... values语句来插入像(%s)这样的元组,但不是这种格式。非常感谢和感谢!
答案 0 :(得分:2)
如psycopg2 docs中所述,您必须将插入的参数作为序列传递给查询,即使只有一个:
cur.execute('''INSERT INTO trademarks_image_mark (trademarks_id, image_mark_id)
SELECT currval('trademarks_id_seq'), id FROM image_mark WHERE
image_file_name LIKE %s''', (data['ImageFileName'],))
以下是文档中的相关部分:
对于位置变量绑定,第二个参数必须始终为a 序列,即使它包含单个变量。记得那个 Python需要一个逗号来创建单个元素元组:
>>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct
>>> cur.execute("INSERT INTO foo VALUES (%s)", ["bar"]) # correct