psycopg2.ProgrammingError: "\"附近有语法错误"

6
我有一个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: syntax error at or near "\" LINE 1: \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是一个数据库封装器,它创建连接并执行查询。


3
\copy是仅被psql命令行工具识别的命令。它不是有效的SQL语句。该命令行工具很可能使用多个SQL构造将数据加载后导出到文本文件中。 - Martijn Pieters
而对于有效的SQL语句 - 您可以在http://www.postgresql.org/docs/8.2/static/sql-copy.html找到它。 - Jon Clements
如果我将代码行query="\copy %s TO %s"%('test_table', 'test_file.txt')替换为query='pg_dump table_name > %s'%(txt_file),我仍然会遇到相同的错误。 - Darknight
您可以使用其中一种复制方法(在您的情况下为.copy_to):http://initd.org/psycopg/docs/cursor.html#cursor.copy_from - freakish
@freakish 我也尝试了那种方法。但仍然面临着相同的错误。 - Darknight
显示剩余7条评论
1个回答

6

\是Python字符串中的转义字符,所以您的字符串包含转义码\c。然而,在Python中,\c是无效的转义字符,并且Python会保留无效的转义字符,因此"\copy"就只是\copy。(因此@tiziano的答案是误导性的)。

>>> print "\c"
\c

实际问题在于\copy是一个psql命令,而不是服务器端的PostgreSQL命令。您不能在除psql之外的客户端中使用它。相反,您必须使用 COPYpsycopg2支持来通过客户端驱动程序执行该操作。


@Craig..谢谢你的解释。我做了更改,使脚本成功运行。 - Darknight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接