使用 Python 将 PostgreSQL 查询导出到 csv 文件

Exporting a PostgreSQL query to a csv file using Python

我需要使用 Python 脚本将一些行从 PostgreSQL 数据库中的 table 导出到 .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 '...

有谁知道哪里出了问题或给我提示?

\COPY 是一个 psql command(基于客户端),因此 不是 一个有效的 SQL 命令。只需使用 COPY(不带反斜杠 \)尝试相同的方法。

如果你想直接在客户端输出文件,你可能想使用 COPY,否则它将在数据库服务器上创建,这是一个 奢侈不是每个人都有。

\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)

详细了解函数 in the documentation.

是的,所有与 \COPY as SQL 命令相关的陈述都是正确的。 如果您想尝试与问题中所述相同的方法,那么您可以将其作为 python 脚本中的 shell 命令进行尝试。

例如:

import os
      
cmd1 = " Your SQL to csv Command"           
os.system(cmd1)

您可以使用以下语法:

query = """ select * from instalacje WHERE date > '2022-02-20'"""

outputquery = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(query)

with open("C:/1/Wojciech_CCC.csv", "w") as f:
    cur.copy_expert(outputquery, f)