Python 语法错误 - 使用 psycopg2 的 psql 查询中的反斜杠

分享于2022年07月17日 postgresql psql psycopg2 python 问答
【问题标题】:Python 语法错误 - 使用 psycopg2 的 psql 查询中的反斜杠(Python syntax error - backslash in psql queries with psycopg2)
【发布时间】:2022-01-27 23:37:59
【问题描述】:

我有一个小的 python 脚本。我想使用库 psycopg2 执行 psql 命令:

query = "\COPY ( select * from 'schema'.structure) TO 'path' DELIMITER ',' CSV HEADER;"

但是 \COPY 出现语法错误。 我试图用 '' \\ 改变它,但似乎没有任何效果。我不想使用 cur.copy_from

有什么建议吗?

  • \copy only 适用于 psql ,它不是一般的 SQL command ,不能通过Python使用。如果 Python 为此提供了特定的 API,那么您将不得不使用它。

【解决方案1】:

如果要将 psycopg2 用于 COPY ing 与自定义SQL,则必须使用 copy_expert 。假设您的查询有效,这样:

with open(file_path, "w") as outfile:
    cur.copy_expert("COPY (select * from 'schema'.structure) TO STDOUT DELIMITER ',' CSV HEADER", outfile)

您必须提供一个可写文件作为第二个参数,并在查询中使用 TO STDOUT

  • 成功了!我还看到您可以使用 cur.copy_from 和 cur.copy_to。但是使用 cur.copy_expert 我对权限没有任何问题。谢谢!