0

我正在努力解决以下(相对简单的)问题。我在 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 字段转换为整数而不是长整数,并将日期转换为字符串。这一切的重点是我最终得到了一个类似这样的 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 但我无法终生了解如何为每种数据类型做不同的事情。

4

2 回答 2

2

您可以使用该csv模块在事后自动转换回字符串,或者您可以Connection使用自定义值初始化对象conv以覆盖默认类型转换字典,从而为您提供从 MySQL 返回的原始字符串的所有内容。只要意识到这意味着您必须手动进行所有转换,或者如果您希望在代码中的任何其他点进行自动类型转换,则必须对同一个数据库进行第二次自动转换连接。

于 2013-01-04T16:04:45.590 回答
1

为什么这些价值观很特别?MySQLdb会自动转换成 python 类型(int变成longDATE变成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使用这个是一个空字符串。)

于 2013-01-04T17:44:10.577 回答