Python MySQLdb返回datetime.date和decimal

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)

10246被检查发现MySQLdb.converters.conversions在一个交互式的Python会话,使基于默认值的猜测.

连接后也可以更改转换器:

connection.converter=conv
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您是如何使用SQL查询解决问题的?请添加它作为答案.

  • 正如我刚刚发现的那样,您可能希望使用FIELD_TYPE.NEWDECIMAL(246)而不是FIELD_TYPE.DECIMAL(0) (2认同)

Amb*_*ber 5

如果您的意思是希望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

  • 如果这是你第一次,有什么更好的时间来实际阅读文档并学习如何自己做?你似乎没有被卡住 - 我已经给你一个非常直接的指针,你需要做什么,以及解释如何做的页面.如果您有特定问题,请询问,但请不要让StackOverflow用户为您编写代码. (2认同)