psycopg2.ProgrammingError:“\"处或附近的语法错误; [英] psycopg2.ProgrammingError: syntax error at or near "\"
问题描述
我有一个 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:\"第 1 行或附近的语法错误:\copy
我找不到它抛出错误的原因.有人可以帮我吗?
def process():query="\copy %s TO %s"%('test_table', 'test_file.txt')@env.with_transaction()def do_execute(db):游标 = db.cursor()游标.执行(查询)
<块引用>
do_execute 是一个数据库包装器,它创建连接和执行查询.
\
是 Python 字符串中的转义符,因此您的字符串包含转义符 \c
.然而 \c
在 Python 中是一个无效的转义,并且 Python 保持无效的转义不变,所以 "\copy"
只是 \copy
.(因此@tiziano 的回答具有误导性).
真正的问题是 \copy
是一个 psql
命令,而不是服务器端的 PostgreSQL 命令.您不能将它与 psql
以外的客户端一起使用.您必须改为使用 psycopg2
支持 COPY
通过您的客户端驱动程序来完成.
I have a python module which copy data from a table to a file.Im using postgresql as database server. COPY is the command is to be used to do the above action.
However in a blog (http://grokbase.com/t/postgresql/pgsql-general/058tagtped/about-error-must-be-superuser-to-copy-to-or-from-a-file) it states that, You can use \copy in 'psql' on the client side, but you have to be a superuser to do COPY on the server side, for security reasons. So I used \copy command. When I try to execute the below method, it results in error as
psycopg2.ProgrammingError: syntax error at or near "\" LINE 1: \copy
I can't find why its throwing error. can someone help me out?
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 is a database wrapper, which creates connection and executes the query.
\
is an escape in Python strings, so your string contains the escape \c
. However \c
is an invalid escape in Python, and Python leaves invalid escapes unchanged, so "\copy"
is just \copy
. (Thus @tiziano's answer is misleading).
>>> print "\c"
\c
The real problem is that \copy
is a psql
command, not a server side PostgreSQL command. You can't use it with a client other than psql
. You must instead use the psycopg2
support for COPY
to do it via your client driver.
这篇关于psycopg2.ProgrammingError:“\"处或附近的语法错误;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!