繁体   English   中英

MySQL数据库的peewee DateField属性为None

[英]peewee DateField property is None with MySQL database

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

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

class Pub(BaseModel):
    ...
    author = TextField(null=True)
    ...
    publish_date = DateField(null=True)
    ...

然后,当entry in Pub.select()迭代entry in Pub.select()时, entry.publish_date始终为None ,尽管数据库中的所有条目都设置了日期(或至少部分日期,例如年份,即像2016-00-00这样的条目)。

(有一个相关的问题,但问题是不同的:它没有设置,因此解决方案是auto_now_add 。)

这是为什么? 也许formats错了? 如何解决这个问题?

如何调试?


一些调试:

我猜peewee会在引擎盖下使用pymsql 所以我试着做这个简单的事情:

import pymysql
conn = pymysql.connect(...)
cur = conn.cursor()
cur.execute("SELECT publish_date FROM pub")

然后row in cur迭代row in cur ,我将只获得row == (None,)

将值预先转换为char ,它可以工作,即我将值作为字符串获取:

cur.execute("SELECT CAST(publish_date AS char) FROM pub")

我认为现在这是一个错误。 在这里报告了peeweepymysql

这是pymysql中的一个问题/错误,尽管还不清楚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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM