我正在努力解决以下(相对简单)的问题。我在MySQLdb中使用SELECT查询,它返回以下数据:
select * from extension_recording where filename = "20091030_135711-out.wav";
+----+--------------+------+-------------------------+----------+--------+--------------------+---------------------------+--------+-----------------+------+-------+
| id | extension_id | flow | filename | filesize | unread | cr_date | callerid | length | callid | info | party |
+----+--------------+------+-------------------------+----------+--------+---------------------+---------------------------+--------+-----------------+------+-------+
| 1 | 41 | out | 20091030_135711-out.wav | 264684 | 1 | 2009-10-30 13:57:31 | Some user <01273123456> | 20 | 1256911031.5482 | | NULL |
+----+--------------+------+-------------------------+----------+--------+---------------------+---------------------------+--------+-----------------+------+-------+
我试图以下列方式使用它:
cur.execute ("SELECT * FROM extension_recording WHERE filename = %s;", (file))
csv_result = cur.fetchone()
csv_list.append ([csv_result])
这会产生一个包含Python数据类型的列表:
print csv_list
(1L, 41L, 'out', '20091030_135711-out.wav', 264684L, '1', datetime.datetime(2009, 10, 30, 13, 57, 31), 'Some user <01273123456>', 20L, '1256911031.5482', '', None)
我需要将数据作为MySQL数据类型输出到CSV,因此我需要适当地转换每个字段,即将id和extension_id字段转换为int而不是long,并将日期转换为字符串。所有这一切的要点是我最终得到了一个类似这样的CSV文件:
1,41,'out','20091030_135711-out.wav',264684,'1','2009-10-30 13:57:31','Some user <01273123456>',20,'1256911031.5482','',None
我可以看到我可能需要遍历csv_result,但我不能在我的生活中看到如何针对每种数据类型进行不同的操作。
答案 0 :(得分:2)
您可以使用csv
模块在事后自动转换回字符串,或者您可以使用自定义Connection
值初始化conv
对象以覆盖默认类型转换字典为您提供从MySQL返回的原始字符串的所有内容。只要意识到这意味着你必须手动完成所有转换,或者如果你想在代码中的任何其他位置进行自动类型转换,那么必须有第二次自动转换连接到同一个数据库。
答案 1 :(得分:1)
为什么这些价值观特殊? MySQLdb
自动转换为python类型(int
变为long
,DATE
变为datetime
等等。)。只有csv元组返回:
import csv
with open('file.csv', 'wb') as csvfile:
csv_ = csv.writer(csvfile)
csv_.writerow(csv_list)
这可以满足您的一切需求
(如果您需要引号,请添加quotechar="'", quoting = csv.CONSTANTHERE
关键字)
文件内容:
1,41,out,20091030_135711-out.wav,264684,1,2009-10-30 13:57:31,Some user <01273123456>,20,1256911031.5482,,
(注意:None
是一个使用它的空字符串。)