Мне нужно экспортировать некоторые строки из таблицы в базе данных 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 '...
Кто-нибудь знает, что может быть неправильным или дать мне совет?
\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)
\COPY
- это команда psql (на основе клиента) и, следовательно, не действительная команда SQL. Попробуйте то же самое, просто используя COPY
(без обратной косой черты \
).
Если вы хотите получить выходной файл непосредственно у клиента, вы можете использовать STDOUT из COPY
, иначе он будет создан на сервере базы данных, который является роскошью, не у всех.
'\'
\copy
- это команда psql, а не команда sql.