![](/img/trans.png)
[英]Reading DateField with specific format from SQL database using peewee
[英]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")
这是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.