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