【问题标题】:psycopg2.ProgrammingError: syntax error at or near "\"psycopg2.ProgrammingError:“\”处或附近的语法错误
【发布时间】:2013-08-08 10:06:01
【问题描述】:

我有一个 python 模块,可以将数据从表复制到文件。我使用 postgresql 作为数据库服务器。 COPY 是用于执行上述操作的命令。

但是在博客 (http://grokbase.com/t/postgresql/pgsql-general/058tagtped/about-error-must-be-superuser-to-copy-to-or-from-a-file) 中指出,您可以在客户端的“psql”中使用 \copy,但出于安全原因,您必须是超级用户才能在服务器端执行 COPY。所以我使用了 \copy 命令。当我尝试执行以下方法时,会导致错误为

psycopg2.ProgrammingError: "\" LINE 1: \copy 处或附近的语法错误:\copy

我找不到它抛出错误的原因。有人可以帮帮我吗?

def process():
     query="\copy %s TO %s"%('test_table', 'test_file.txt')

     @env.with_transaction()
     def do_execute(db):
         cursor = db.cursor()
         cursor.execute(query)

do_execute 是一个数据库包装器,它创建连接和 执行查询。

【问题讨论】:

  • \copy 是一个只能被psql 命令行工具识别的命令。它是有效的 SQL。命令行工具最有可能使用几个 SQL 结构来加载数据,然后将其导出到文本文件。
  • 对于那个有效的 SQL - 你可以在postgresql.org/docs/8.2/static/sql-copy.html找到它
  • 同一页面声明:如果您不使用“psql”并且您的客户端库支持它,您可以使用“COPY FROM stdin”并通过客户端连接传递数据。我>
  • @MartijnPieters 谢谢。

标签: python postgresql


【解决方案1】:

\ 是 Python 字符串中的转义符,因此您的字符串包含转义符 \c。然而\c 在 Python 中是一个无效的转义,Python 保持无效的转义不变,所以"\copy" 只是\copy。 (因此@tiziano 的回答具有误导性)。

>>> print "\c"
\c

真正的问题是\copypsql 命令,而不是服务器端的PostgreSQL 命令。您不能将它与psql 以外的客户端一起使用。您必须改为使用 the psycopg2 support for COPY 通过您的客户端驱动程序来执行此操作。

【讨论】:

  • @Craig.. 感谢您的解释。我进行了更改并使脚本成功运行
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
相关资源
最近更新 更多