Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MySQLdb从SELECT转换CSV输出的列表数据_Python_Mysql_Select - Fatal编程技术网

Python MySQLdb从SELECT转换CSV输出的列表数据

Python MySQLdb从SELECT转换CSV输出的列表数据,python,mysql,select,Python,Mysql,Select,我正在努力解决以下(相对简单的)问题。我在MySQLdb中使用SELECT查询,它返回以下数据: select * from extension_recording where filename = "20091030_135711-out.wav"; +----+--------------+------+-------------------------+----------+--------+--------------------+---------------------------+

我正在努力解决以下(相对简单的)问题。我在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  |
+----+--------------+------+-------------------------+----------+--------+---------------------+---------------------------+--------+-----------------+------+-------+
这将生成一个包含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)
打印csv\u列表
(1L,41L,'out','20091030_135711-out.wav',264684L,'1',datetime.datetime(2009,10,30,13,57,31),'Some user',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
1,41,'out','20091030_135711-out.wav',264684,'1','2009-10-30 13:57:31','Some user',20,'1256911031.5482','',无

我可以看到我可能需要迭代csv_结果,但我一生都看不到如何对每种数据类型进行不同的转换。

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

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

为什么这些值是特殊的
MySQLdb
自动转换为python类型(
int
变成
long
DATE
变成
datetime
,等等)。仅返回元组:

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,,
1,41,out,20091030_135711-out.wav,264684,12009-10-30 13:57:31,一些用户,201256911031.5482,,

(注意:
None
是使用此选项的空字符串。)

为什么这些值是特殊的
MySQLdb
自动转换为python类型(
int
变成
long
DATE
变成
datetime
,等等)。仅返回元组:

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,,
1,41,out,20091030_135711-out.wav,264684,12009-10-30 13:57:31,一些用户,201256911031.5482,,


(注意:
None
是使用此选项的空字符串。)

这些类型一致吗?我的意思是,通过获取一行得到的结果是否与表中的类型一致?您使用哪个库连接到数据库?我不确定我是否看到了问题所在。只需使用
csv
模块,它将完全满足您的需求。此外,您问题的标题似乎与问题无关。Python在您的select查询上进行迭代似乎很好(尽管因为您使用的是
cursor.fetchone()
它是双重不相关的)。@iGuanaaut抱歉,我可以看到标题看起来是多么不相关,我想我可以在csv\u结果中的字段上进行迭代。我来换@iGuanaaut您能给我指出一些演示如何以这种方式使用csv模块的文档吗?这些类型一致吗?我的意思是,通过获取一行得到的结果是否与表中的类型一致?您使用哪个库连接到数据库?我不确定我是否看到了问题所在。只需使用
csv
模块,它将完全满足您的需求。此外,您问题的标题似乎与问题无关。Python在您的select查询上进行迭代似乎很好(尽管因为您使用的是
cursor.fetchone()
它是双重不相关的)。@iGuanaaut抱歉,我可以看到标题看起来是多么不相关,我想我可以在csv\u结果中的字段上进行迭代。我来换@iGuanaaut您能给我指出一些演示如何以这种方式使用csv模块的文档吗?我一直在阅读csv模块文档,但还没有看到如何更改记录到csv文件中的格式。我可以使用以下代码编写文件,但是csv列表中的行的值仍然不正确(ints为1L,dates为datetime(dd,mm,…
csvfile=open(tar_path+“/”+client_fileid+”.csv“,'wb')wr=csv.writer(csvfile,dial='excel'):wr.writerow(row)
print csv\u list
将为其中的数据打印
\uu str\uuu
,这意味着您将始终获得所看到的输出,除非您通过更改
连接来处理原始数据。文件中的输出是否格式也不正确?是的-文件中的输出看起来与
print相同csv_列表
。似乎我需要在数据进入列表之前对其进行某种类型的类型转换,但如何转换?等等,为什么在将其添加到
csv_列表
之前要将
csv_结果
包装在一个外部列表中?这将使您的
csv.writer
尝试将整行作为一个元素写入ent在文件的行中,它将首先根据
\u str\u()
\u repr\u()
规则对任何数据进行字符串化