且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

psycopg2.ProgrammingError:“\"处或附近的语法错误;

更新时间:2023-10-10 23:02:28

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

>>>打印\c"\C

真正的问题是 \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.