我尝试使用DBLink插入远程数据库,并且我通过Psycopg2进行查询。这是我的代码,它采用名为fields
的列名列表和名为values
的列值列表:
fields_str = ",".join(fields)
values_str = ("%s, " * len(values))[:-2]
query = """SELECT dblink_exec('{0}', 'INSERT INTO {1} ({2}) VALUES ({3});'""".format(self.foreign_db,
table,
fields_str,
values_str)
这不起作用,因为DBLink期望围绕每个字符串值使用两个单引号,如文档中的示例所示:SELECT dblink_exec('myconn', 'insert into foo values(21,''z'',''{"a0","b0","c0"}'');');
问题是Psycopg2坚持" E"在我所有的弦前摆脱它们。这意味着既不会在我的所有值周围添加单引号,也不会在我的所有"%s"周围添加单引号。我的查询中的部分可以修复此问题。一般问题似乎是Psycopg2无法正确处理DBLink查询字符串中的转义字符串。
psycopg2.ProgrammingError: syntax error at or near "f5907160"
LINE 1: ...ar,tag,oid,objecttype,updatedat,usedat) VALUES (E'f5907160-4...
有什么方法吗?