psycopg2.ProgrammingError: синтаксическая ошибка в или около "\"

У меня есть модуль Python, который копирует данные из таблицы в файл. Я использую postgresql в качестве сервера базы данных. COPY - это команда, используемая для выполнения вышеуказанного действия.

Однако в блоге ( http://grokbase.com/t/postgresql/pgsql-general/058tagtped/about-error-must-be-superuser-to-copy-to-or-from-a-file) говорится, что, Вы можете использовать \copy в 'psql' на стороне клиента, но вы должны быть суперпользователем, чтобы делать 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 - это оболочка базы данных, которая создает соединение и выполняет запрос.

1 ответ

Решение

\ это escape в строках Python, поэтому ваша строка содержит escape \c, тем не мение \c недопустимый escape в Python, и Python оставляет недопустимые escape-значения без изменений, поэтому "\copy" просто \copy, (Таким образом, ответ @ tiziano вводит в заблуждение).

>>> print "\c"
\c

Настоящая проблема в том, что \copy это psql команда, а не серверная команда PostgreSQL. Вы не можете использовать его с другим клиентом, кроме psql, Вместо этого вы должны использовать psycopg2 Поддержка дляCOPY сделать это через ваш клиентский драйвер.

У меня такие же проблемы, я признателен, если вы покажете мне, как это сделать.

Другие вопросы по тегам