首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有列名的psycopg2将DB导出到csv

问具有列名的psycopg2将DB导出到csv
EN

Stack Overflow用户
提问于 2022-01-05 17:47:37
回答 1查看 1.4K关注 0票数 1

我使用psycopg2连接到postgre,并将数据导出到CSV文件中。

我就是这样将DB导出到csv的:

代码语言:javascript
复制
def export_table_to_csv(self, table, csv_path):
    sql = "COPY (SELECT * FROM %s) TO STDOUT WITH CSV DELIMITER ','" % table
    self.cur.execute(sql)

    with open(csv_path, "w") as file:
        self.cur.copy_expert(sql, file)

但是数据只是行-没有列名的,。

如何使用列名导出数据

P.S.我能打印列名:

代码语言:javascript
复制
sql = '''SELECT * FROM test'''
self.cur.execute(sql)
column_names = [desc[0] for desc in self.cur.description]
for i in column_names:
    print(i)

我想要最干净的方法来导出带有列名的DB (也就是说,我更喜欢在一种方法中这样做,而不是在回溯中重命名列)。

EN

回答 1

Stack Overflow用户

发布于 2022-01-05 18:51:13

正如我在注释中所说,您可以将HEADER添加到SQL的WITH子句中:

代码语言:javascript
复制
sql = "COPY (SELECT * FROM export_test) TO STDOUT WITH CSV HEADER"

默认情况下,逗号分隔符与CSV选项一起使用,因此不需要指定。

对于未来的问题,您应该提交一个minimal reproducible example。也就是说,我们可以直接复制、粘贴和运行代码。我很好奇这个能不能用,所以我做了一个,试了一下:

代码语言:javascript
复制
import psycopg2

conn = psycopg2.connect('host=<host> dbname=<dbname> user=<user>')
cur = conn.cursor()

# create test table
cur.execute('DROP TABLE IF EXISTS export_test')
sql = '''CREATE TABLE export_test
(
  id integer,
  uname text,
  fruit1 text,
  fruit2 text,
  fruit3 text
)'''
cur.execute(sql)

# insert data into table
sql = '''BEGIN;
insert into export_test
(id, uname, fruit1, fruit2, fruit3)
values(1, 'tom jones', 'apple', 'banana', 'pear');
insert into export_test
(id, uname, fruit1, fruit2, fruit3)
values(2, 'billy idol', 'orange', 'cherry', 'strawberry');
COMMIT;'''
cur.execute(sql)

# export to csv
fid = open('export_test.csv', 'w')
sql = "COPY (SELECT * FROM export_test) TO STDOUT WITH CSV HEADER"
cur.copy_expert(sql, fid)
fid.close()

由此产生的文件是:

代码语言:javascript
复制
id,uname,fruit1,fruit2,fruit3
1,tom jones,apple,banana,pear
2,billy idol,orange,cherry,strawberry
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70597355

复制
相关文章

相似问题

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