2014-01-29 40 views
3

我有两个查询要保存在一个CSV文件中。我可以单独做到这一点,但我无法弄清楚如何将两个文件复制到一个文件中(不合并,只需将列从一个文件复制到另一个文件),或许我可以在源代码中使用SQL查询来完成此操作。将MySQL查询结果保存为CSV文件

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它扩展列表的长度,但我想要他们并排。 EG:

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我得到:

​​3210

我真正想要的是:

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 - SOLUTION

这是我做的。我做了几个SQL查询,然后列出。将每个查询结果附加到一个大列表中。这就像我想要的那样水平延伸。然后我可以编写()以我想要的方式获取完整的CSV文件。

+0

你想如何添加它们。作为行或列。 – scriptmonster

+0

每个查询将有〜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,然后在下面有相应的行。 –

回答

0

你基本上要列添加到CSV文件,所以到这里看看:How to add a new column to a CSV file using Python?

+0

是的,我读过,但它不是因为两个原因:1,它假定追加我不想做的,或者至少,我需要追加几行,而不仅仅是一行。 2,我在结果中使用了带有几列的SQL查询,所以我需要一次简单地插入几列的方法。 –

0

EDIT2 - 解决方案

这里是我做的。我做了几个SQL查询,然后列出。将每个查询结果附加到一个大列表中。这就像我想要的那样水平延伸。然后我可以编写()以我想要的方式获取完整的CSV文件。

相关问题