Python peewee DateField属性在MySQL数据库中为None

Python peewee DateField属性在MySQL数据库中为None,python,mysql,peewee,Python,Mysql,Peewee,通过MySQL数据库上的pwiz,我得到: class BaseModel(Model): class Meta: database = database class Pub(BaseModel): ... author = TextField(null=True) ... publish_date = DateField(null=True) ... 然后,在Pub.select()中迭代条目时,entry.publish\u

通过MySQL数据库上的
pwiz
,我得到:

class BaseModel(Model):
    class Meta:
        database = database

class Pub(BaseModel):
    ...
    author = TextField(null=True)
    ...
    publish_date = DateField(null=True)
    ...
然后,在Pub.select()中迭代
条目时,
entry.publish\u date
始终是
None
,尽管数据库中的所有条目都设置了日期(或至少部分,如year,即类似
2016-00-00
)的条目)

(有一个问题,但问题不同:它没有设置,因此解决方案是
auto\u now\u add

为什么呢?也许
格式
是错误的?如何解决这个问题

如何调试这个


一些调试:

我猜
peewee
将在引擎盖下使用
pymsql
。所以我试着做一件简单的事:

import pymysql
conn = pymysql.connect(...)
cur = conn.cursor()
cur.execute("SELECT publish_date FROM pub")
然后在cur中迭代
行,我只会得到
行==(无,)

当预先将值强制转换为char
时,它会起作用,也就是说,我将值转换为字符串:

cur.execute("SELECT CAST(publish_date AS char) FROM pub")
我认为这是一个错误了。我报告了这一点。

这是一个问题,尽管还不清楚pymysql应该如何处理它

目前,这种猴子补丁方法在一定程度上解决了这个问题;如果日期不能表示为
datetime
对象,它将以字符串形式返回日期

def monkey_patch_pymysql_date_fix():
    import pymysql
    orig_convert_date = pymysql.converters.convert_date
    def fixed_convert_date(obj):
        res = orig_convert_date(obj)
        if res is None:
            return obj
        return res
    pymysql.converters.convert_date = fixed_convert_date
    from pymysql.constants import FIELD_TYPE
    pymysql.converters.decoders[FIELD_TYPE.DATE] = fixed_convert_date
    pymysql.converters.conversions[FIELD_TYPE.DATE] = fixed_convert_date
虽然还不清楚pymysql应该如何处理它,但这是一个非常复杂的问题

目前,这种猴子补丁方法在一定程度上解决了这个问题;如果日期不能表示为
datetime
对象,它将以字符串形式返回日期

def monkey_patch_pymysql_date_fix():
    import pymysql
    orig_convert_date = pymysql.converters.convert_date
    def fixed_convert_date(obj):
        res = orig_convert_date(obj)
        if res is None:
            return obj
        return res
    pymysql.converters.convert_date = fixed_convert_date
    from pymysql.constants import FIELD_TYPE
    pymysql.converters.decoders[FIELD_TYPE.DATE] = fixed_convert_date
    pymysql.converters.conversions[FIELD_TYPE.DATE] = fixed_convert_date