Экспорт запроса PostgreSQL в CSV-файл с использованием Python

2

Мне нужно экспортировать некоторые строки из таблицы в базе данных PostgreSQL в CSV файл, используя скрипт Python:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, psycopg2

...

    conn = psycopg2.connect("dbname=dbname user=user password=password")
    cur = conn.cursor()

    sql = "\copy (SELECT * FROM table WHERE month=6) TO '/mnt/results/month/table.csv' WITH CSV DELIMITER ';';"
    cur.execute(sql)
    cur.close()

...

Но когда я запускаю сценарий, я получаю следующее:

Syntax error at or near «\»
LINE 1: \copy (SELECT * FROM TABLE WHERE month=6) TO '...

Кто-нибудь знает, что может быть неправильным или дать мне совет?

  • 0
    Вы пытались использовать кавычки, чтобы это было \\ вместо одного \? Смотрите эту публикацию и эту .
  • 1
    Удалить '\' \copy - это команда psql, а не команда sql.
Показать ещё 1 комментарий
Теги:
psycopg2
export-to-csv

2 ответа

1
Лучший ответ

\copy - это не команда SQL, это команда, специфичная для psql терминального клиента Postgres, и ее нельзя использовать в этом контексте.

copy_expert(sql, file, size=8192) используйте copy_expert(sql, file, size=8192), например:

sql = "COPY (SELECT * FROM a_table WHERE month=6) TO STDOUT WITH CSV DELIMITER ';'"
with open("/mnt/results/month/table.csv", "w") as file:
    cur.copy_expert(sql, file)
1

\COPY - это команда psql (на основе клиента) и, следовательно, не действительная команда SQL. Попробуйте то же самое, просто используя COPY (без обратной косой черты \).

Если вы хотите получить выходной файл непосредственно у клиента, вы можете использовать STDOUT из COPY, иначе он будет создан на сервере базы данных, который является роскошью, не у всех.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню