将 MySQL 查询结果保存到 CSV 文件
Posted
技术标签:
【中文标题】将 MySQL 查询结果保存到 CSV 文件【英文标题】:Saving MySQL query results to a CSV file 【发布时间】:2014-02-20 20:29:30 【问题描述】:我有两个查询要一起保存在一个 CSV 文件中。我可以单独执行此操作,但我不知道如何将这两个文件复制到一个文件中(不合并,只是将列从一个文件复制到另一个文件)所以也许我可以在源代码处使用 SQL 查询来执行此操作。
import mysqldb, csv
dbServer = 'localhost'
dbUser = 'root'
dbPass = 'password'
dbSchema = 'Name_of_Database'
db = MySQLdb.connect(host=dbServer, user=dbUser,passwd=dbPass,db=dbSchema)
cursor = db.cursor()
cursor.execute("""SELECT * FROM temperature_tbl WHERE Mac_Address = %s AND Date = CURDATE() ORDER BY Time asc;""",(mac))
first_set = cursor.fetchall()
cursor.execute("""SELECT row1, row2, row3, row4 FROM temperature_tbl WHERE Mac_Address = "xx xx xx xx xx xx" AND Date = CURDATE() ORDER BY Time asc;""")
second_set = cursor.fetchall()
现在我有了这两个查询的元组结果,是否可以在 CSV 文件中同时写入它们?例如:
csv_file = open('filename', 'w')
writer = csv.writer(csv_file)
writer.writerow(['col1', 'col2', 'col3', 'col4', 'col5', etc etc etc])
writer.writerows(first_set + second_set)
csv_file.close()
只要两个查询的结果与行标题匹配就完美了。
EDIT1:好的,怎么样。我如何将两个元组的元组连接在一起,这样我就不会延长元组的长度,而是将它们并行连接起来?如果我只是添加 tuple1 + tuple2 它会扩展列表的长度,但我希望它们并排。例如:
Tuple1: Tuple2:
x,x,x,x y,y,y,y
x,x,x,x y,y,y,y
x,x,x,x y,y,y,y
如果我执行 tuple1 + tuple2 我会得到:
x,x,x,x
x,x,x,x
x,x,x,x
y,y,y,y
y,y,y,y
y,y,y,y
我真正想要的是:
x,x,x,x,y,y,y,y
x,x,x,x,y,y,y,y
x,x,x,x,y,y,y,y
然后我可以 writerows() 并通过删除额外的列来修改 CSV(例如 Date 被引用两次)。
这可能吗?
EDIT2 - 解决方案
这就是我所做的。我做了几个 SQL 查询,然后将每个查询结果 list.append 到一个大列表中。这就像我想要的那样水平延伸。然后我可以 writerows() 以我想要的方式获取完整的 CSV 文件。
【问题讨论】:
你想如何添加它们。作为行或列。 每个查询将有大约 2000 行和大约 9 列。理想情况下,我希望将它们并行添加,以便所有列都在顶部表示,然后实际结果将从标题下方的第一行开始,然后向下延伸。 EG:如果 first_set 返回包含数据的列 a,b,c,d,e 并且 second_set 返回 f,g,h,i,j 那么文件将如下所示:a,b,d,e,f,g, h,i,j 然后将在下面有相应的行。 【参考方案1】:您基本上是想在 CSV 文件中添加列,所以请看这里:How to add a new column to a CSV file using Python?
【讨论】:
是的,我已经读过了,但它没有这样做有两个原因:1,它假定附加我不想做的事情,或者至少,我需要附加几行,不只是一个。 2,我在结果中使用了多列的 SQL 查询,所以我需要一种巧妙的方法来一次插入多列。【参考方案2】:EDIT2 - 解决方案
这就是我所做的。我做了几个 SQL 查询,然后将每个查询结果 list.append 到一个大列表中。这就像我想要的那样水平延伸。然后我可以 writerows() 以我想要的方式获取完整的 CSV 文件。
【讨论】:
以上是关于将 MySQL 查询结果保存到 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 CSV 上传到 redshift 并让它自动运行并导出保存的查询?