我有一个python模块,它将数据从表复制到文件。我使用postgresql作为数据库服务器。 COPY是用于执行上述操作的命令。
然而,在博客(http://grokbase.com/t/postgresql/pgsql-general/058tagtped/about-error-must-be-superuser-to-copy-to-or-from-a-file)中,它指出,您可以在客户端使用\ copy in'psql',但出于安全考虑,您必须是超级用户才能在服务器端执行COPY 。所以我使用了\ copy命令。当我尝试执行以下方法时,它会导致错误
psycopg2.ProgrammingError:语法错误在“\”第1行或附近第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是一个数据库包装器,它创建连接和 执行查询。
答案 0 :(得分:5)
\
是Python字符串中的转义符,因此您的字符串包含转义符\c
。但是\c
在Python中是一个无效的转义,并且Python保留了无效的转义,因此"\copy"
只是\copy
。 (因此@ tiziano的回答是误导性的。)
>>> print "\c"
\c
真正的问题是\copy
是psql
命令,而不是服务器端PostgreSQL命令。您不能将其用于psql
以外的客户端。您必须使用the psycopg2
support for COPY
通过客户端驱动程序执行此操作。
答案 1 :(得分:0)
我遇到了同样的问题,如果您能向我展示如何操作,我将不胜感激。