如何在Python中从数据库创建CSV文件?

30 投票
8 回答
93256 浏览
提问于 2025-04-16 04:08

我有一个名为“clients”的Sqlite 3和/或MySQL表。

我想用Python 2.6创建一个名为Clients100914.csv的CSV文件,并且这个文件需要有表头,格式要符合Excel的要求。

我用的SQL命令是select *,这个命令只会给我表里的数据,但我想要的是完整的表格,包括表头。

我该如何创建一个记录集来获取表头?这些表头应该直接从SQL中获取,而不是在Python中手动写的。

w = csv.writer(open(Fn,'wb'),dialect='excel')
#w.writelines("header_row")
#Fetch into sqld
w.writerows(sqld)

这段代码让我得到的文件是打开状态,并且没有表头。而且我也搞不清楚怎么把这个文件用作日志。

8 个回答

5

你可以很简单地手动创建一个文件,里面用你选择的分隔符来分开内容。你也可以使用csv模块来帮你。

如果数据是来自数据库,你也可以直接用你的sqlite客户端发个查询:

sqlite <db params> < queryfile.sql > output.csv

这样就会生成一个用制表符分隔的csv文件。

8

使用 csv模块 非常简单,正好适合这个任务。

import csv
writer = csv.writer(open("out.csv", 'w'))
writer.writerow(['name', 'address', 'phone', 'etc'])
writer.writerow(['bob', '2 main st', '703', 'yada'])
writer.writerow(['mary', '3 main st', '704', 'yada'])

它生成的格式正是你所期待的。

72
import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
#with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) 提供了关于 cursor.description 的更多信息。

撰写回答