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: "\" 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 是一个数据库包装器,它创建连接并执行查询。

4

1 回答 1

6

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

>>> print "\c"
\c

真正的问题是这\copy是一个psql命令,而不是服务器端 PostgreSQL 命令。您不能将它与psql. 您必须改为使用支持来通过您的客户端驱动程序执行此操作psycopg2COPY

于 2013-08-08T13:38:43.157 回答