【发布时间】:2016-09-14 19:05:45
【问题描述】:
基本上我想从几个 SQL 查询中创建一个 csv 文件。到目前为止我所拥有的:
import pyodbc
import csv
import itertools
conn = pyodbc.connect("user")
cur = conn.cursor()
sql_queries = ['query_1', 'query_2', 'query_3']
columns = []
rows = []
for query in sql_queries:
cur.execute(query)
columns.append([i[0] for i in cur.description])
rows.append(cur.fetchall())
flat_columns = list(itertools.chain.from_iterable(columns))
fp = open('temp_file.csv', 'w')
my_file = csv.writer(fp)
my_file.writerow(flat_columns)
for row in rows:
my_file.writerows(row)
fp.close()
flat_columns 在顶部正确打印各种查询的所有列标题,但随后按顺序打印行(即,不在正确标题下,第一个查询除外)。有没有办法让它们在适当的标题下水平排列?查询产生不同数量的行和列。
编辑 例如,假设 query1 产生 2 列(headers1-2),而 query2 和 query3 分别产生 1 列(分别是 header3 和 header4),其中 query1 产生形式为“xx”、query2 为“yy”和 query3 为“zz”的结果。这是我目前得到的:
header1 header2 header3 header4
xx xx
xx xx
xx xx
yy
yy
zz
这就是我想要的:
header1 header2 header3 header4
xx xx yy zz
xx xx yy
xx xx
【问题讨论】:
-
如果能看到一些当前和期望结果的数据,那真是太好了。
-
添加了一些插图
-
您能否在本地保存数据之前放入
print语句,并向我们展示为flat_columns打印的内容。基本上是print(flat_columns),然后再保存。 -
flat_columns 只是所有查询的标题名称的一维列表:['header1', 'header2', 'header3', 'header4']
-
rows中有什么内容?格式是什么?