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

hgc7kmma  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(4)|浏览(209)

我需要使用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 '...

有人知道什么地方可能出了问题或者给予我一个提示吗?

jc3wubiy

jc3wubiy1#

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

阅读文档中有关函数的详细信息。

xzv2uavs

xzv2uavs2#

\COPYpsql command(基于客户端),因此不是有效的SQL命令。使用COPY(不带反斜杠\)尝试相同的操作。
如果您希望输出文件直接在客户机上,您可能希望使用COPYSTDOUT,否则它将在数据库服务器上创建,这不是每个人都拥有的 * 奢侈品 *。

wgxvkvu9

wgxvkvu93#

是的,所有与\COPY相关的语句都是正确的。如果你想尝试与问题中所述相同的语句,那么你可以尝试将其作为Python脚本中的shell命令。
例如:

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

bq3bfh9z4#

可以使用以下语法:

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)

相关问题