更新时间:2023-10-10 23:02:28
\
是 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.