【发布时间】:2021-02-20 12:49:37
【问题描述】:
我尝试将行/元组列表插入到我的 postgresql 数据库中。所以我找到了函数execute_values() ...但是行自动获取id是行不通的。
我的代码:
query = "INSERT INTO "+ self.table + " VALUES %s"
execute_values(self.cursor,query, row)
self.con.commit()
我的数据库中的第一列是id,我的行元组的第一列是TEXT(数据库中的第二列也是TEXT)
所以我得到了错误:
psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "blub"
LINE 1: INSERT INTO whales VALUES ('blub...
所以我猜是因为 id。
我也试过template,但结果也好不到哪里去:
database.py", line 204, in insert_row
execute_values(self.cursor,query, row, "(%(name)s,%(is_member)s)")
File "C:\Just\a\Path\env\lib\site-packages\psycopg2\extras.py", line 1289, in execute_values
parts.append(cur.mogrify(template, args))
TypeError: tuple indices must be integers or slices, not str
也许我读错了文档或者不理解模板...
现在的问题是: 我该如何处理?对于“正常”执行,我不需要添加 id。有没有办法用 execute_values() 做到这一点? 还是唯一的方法是先通过 select 获取 id 并将未使用的 id 也提供给 execute_values?
【问题讨论】:
-
您应该指定数据所属的列:
INSERT INTO foo (text_col_1, text_col_2) VALUES ...,假设id列自动递增。
标签: python postgresql psycopg2 execute