我需要使用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 '...有没有人知道哪里会出问题,或者给我点建议?
发布于 2018-04-02 21:51:04
\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.函数的更多信息
发布于 2018-04-02 21:43:33
\COPY是一个 (基于客户端),因此不是有效的SQL命令。只需使用COPY (不带反斜杠\)即可尝试相同的操作。
如果你想要直接在客户端输出文件,你可能想要使用COPY的,否则它将在数据库服务器上创建,这是一个奢侈的不是每个人都有的。
发布于 2021-08-02 05:27:30
是的,所有与\COPY as SQL命令相关的语句都是正确的。如果您想尝试与问题中所述相同的方法,那么您可以在python脚本中将其作为shell命令进行尝试。
例如:
import os
cmd1 = " Your SQL to csv Command"
os.system(cmd1)https://stackoverflow.com/questions/49610908
复制相似问题