使用Psycopg2运行DBLink INSERT查询,遇到格式问题

时间:2015-07-29 03:15:20

标签: postgresql psycopg2 dblink

我尝试使用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...

有什么方法吗?

0 个答案:

没有答案