首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python将PostgreSQL查询导出到csv文件

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

Stack Overflow用户
提问于 2018-04-02 20:00:49
回答 4查看 14.5K关注 0票数 13

我需要使用Python脚本将PostgreSQL数据库表中的一些行导出到.csv文件中:

代码语言:javascript
运行
复制
#!/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()

...

但是当我运行这个脚本时,我得到的结果是:

代码语言:javascript
运行
复制
Syntax error at or near «\»
LINE 1: \copy (SELECT * FROM TABLE WHERE month=6) TO '...

有没有人知道哪里会出问题,或者给我点建议?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-02 21:51:04

\copy不是SQL命令,它是Postgres终端客户端psql专用的命令,不能在此上下文中使用。

请改用copy_expert(sql, file, size=8192),例如:

代码语言:javascript
运行
复制
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.函数的更多信息

票数 21
EN

Stack Overflow用户

发布于 2018-04-02 21:43:33

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

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

票数 1
EN

Stack Overflow用户

发布于 2021-08-02 05:27:30

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

例如:

代码语言:javascript
运行
复制
import os
      
cmd1 = " Your SQL to csv Command"           
os.system(cmd1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49610908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档