web-dev-qa-db-ja.com

Pythonを使用してPostgreSQLクエリをcsvファイルにエクスポートする

Pythonスクリプトを使用して、PostgreSQLデータベースのテーブルから.csvファイルにいくつかの行をエクスポートする必要があります。

#!/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 '...

誰かが間違っている可能性があることを知っていますか、それとも私にヒントを与えますか?

7
Viskovitz

_\copy_はSQLコマンドではなく、Postgres端末クライアントpsqlに固有のコマンドであり、このコンテキストでは使用できません。

代わりに 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)
_
10
klin

_\COPY_は psqlコマンド (クライアントベース)であるため、not有効なSQLコマンド。 COPYを使用して同じことを試してください(バックスラッシュなし_\_)。

クライアントで直接出力ファイルが必要な場合は、 [〜#〜] stdout [〜#〜] of COPY、それ以外の場合は、データベースサーバーで作成されます。これは、luxuryです。

1
Jim Jones