2016-10-04 10 views
1

経由pwizとNoneです、私が取得:entry in Pub.select()を反復するとき、データベース内のすべてのエントリは、日付が設定されているもののピーウィーのDateFieldプロパティは私のMySQLデータベースにMySQLデータベース

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

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

はその後、entry.publish_dateは、常にNoneです(またはそれの少なくとも一部、たとえば年、すなわち2016-00-00のようなエントリ)。

(ありrelated questionがあるが、その問題が異なります。それが設定され、したがって、解決策は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 == (None,)を取得します。すなわち、それは動作しますが、charに事前に値をキャストすると

私は、文字列として値を取得:

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

私はこれが今のバグだと思います。私はこれをhere for peeweehere for pymysqlと報告しました。

答えて

0

これはproblem/bug in pymysqlですが、pymysqlがこれをどのように処理するかはまだ明確ではありません。

今のところ、このmonkey-patch-methodは問題をある程度修正します。 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