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

使用Python将PostgreSQL查询导出到csv文件,python,sql,postgresql,export-to-csv,psycopg2,Python,Sql,Postgresql,Export To Csv,Psycopg2,我需要使用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

我需要使用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 '...
有人知道什么地方可能出错或给我一些提示吗?

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


如果要将输出文件直接放在客户机上,您可能需要使用of
COPY
,否则它将在数据库服务器上创建,这不是每个人都有的奢侈。
\COPY
不是SQL命令,它是特定于Postgres终端客户端的命令,不能在此上下文中使用

改用,例如:

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命令。检查: