将MySQL查询结果保存到CSV文件中

3

我有两个查询,想要将它们保存在一个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()

只要两个查询的结果与行标题匹配,那就完美了。
编辑1:好的,那这样怎么样?我如何将两个元组合并成一个,而不是扩展元组的长度,而是并列连接它们?如果我只是添加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 文件。

这种方法可行吗?

编辑2 - 解决方案

这是我的解决方案。我进行了几个 SQL 查询,然后将每个查询结果 append 到一个大列表中。这样列表会水平扩展,就像我想要的那样。然后,我可以使用 writerows() 函数,得到一个按照我想要的方式完整的 CSV 文件。


你想如何添加它们?作为行还是列? - scriptmonster
每个查询将有约2000行,每行大约有9列。理想情况下,我希望能够并行添加它们,以便所有列都可以在顶部表示,然后实际结果会从标题下面的第一行开始,然后向下延伸。例如:如果第一个集合返回带有数据a、b、c、d、e的列,并且第二个集合返回f、g、h、i、j,则文件将如下所示:a、b、d、e、f、g、h、i、j,然后将在其下方具有相应的行。 - Thor Peterson
2个回答

0

是的,我已经阅读了那篇文章,但它有两个问题:1. 它假设要附加,而我不想这样做,或者至少,我需要附加多行,而不仅仅是一行。2. 我正在使用带有多列结果的SQL查询,因此我需要一种简洁的方法来同时插入多列。 - Thor Peterson

0

编辑2 - 解决方案

这是我所做的。我进行了几个SQL查询,然后将每个查询结果list.appended到一个大列表中。这样它就像我想要的那样水平扩展了。然后我就能够使用writerows()来得到完整的CSV文件,以我想要的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接