arc*_*arc 12 python mysql-python
我有一个MySQL查询,如:
SELECT mydate, countryCode, qtySold from sales order mydate, countryCode
Run Code Online (Sandbox Code Playgroud)
这将返回元组的元组,其值如下:
((datetime.date(2011, 1, 3), 'PR', Decimal('1')), (datetime.date(2011, 1, 31), 'MX', Decimal('1')))
Run Code Online (Sandbox Code Playgroud)
当我尝试使用循环打印时,它打印完美:
2011-1-3, PR, 1
2011-1-31, MX, 1
Run Code Online (Sandbox Code Playgroud)
但是当我尝试返回此值时,它返回为
datetime.date(2011, 1, 3), 'PR', Decimal('1')
Run Code Online (Sandbox Code Playgroud)
有没有办法可以获得普通数据,以便我可以将其传递给UI进行处理?通过正常数据我的意思是:
[['2011-1-03', 'PR', 1], ...]
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 30
默认转换器MySQLdb.converters.conversions是一个dict,其条目如下:
{0: <class 'decimal.Decimal'>,
1: <type 'int'>,
2: <type 'int'>,
3: <type 'long'>,
4: <type 'float'>,
5: <type 'float'>,
7: <function mysql_timestamp_converter at 0x89e4454>,
8: <type 'long'>,
9: <type 'int'>,
10: <function Date_or_None at 0x89e43ac>,
...
}
Run Code Online (Sandbox Code Playgroud)
您可以更改转换器并将其传递给connect方法,如下所示:
conv=converters.conversions.copy()
conv[246]=float # convert decimals to floats
conv[10]=str # convert dates to strings
connection=MySQLdb.connect(
host=HOST,user=USER,
passwd=PASS,db=DB,
conv=conv
)
Run Code Online (Sandbox Code Playgroud)
键10和246被检查发现MySQLdb.converters.conversions在一个交互式的Python会话,使基于默认值的猜测.
连接后也可以更改转换器:
connection.converter=conv
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您是如何使用SQL查询解决问题的?请添加它作为答案.
如果您的意思是希望str类型为您的日期和int类型的数字,请查看datetime.date.strftime()和int():
>>> datetime.date(2011, 1, 3).strftime("%Y-%m-%d")
'2011-01-03'
>>> int(Decimal(2))
2
Run Code Online (Sandbox Code Playgroud)
如果要系统地更改MySQLdb为各种列类型返回的类型,请参阅以下conv关键字参数MySQLdb.connect():
http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb