
[code]

    import pymysql
    import configparser
    
    config = configparser.ConfigParser()
    config.read('mysql.ini', encoding='utf-8')
    config = config['DEFAULT']
    
    mysql = pymysql.connect(**config)
    with mysql.cursor() as cursor:
      sql =f'''
    SELECT str_to_date('20210316', "%Y%m%d"), str_to_date('486200304T090000Z', "%Y%m%d")
          '''
      cursor.execute(sql)
      results = cursor.fetchall()
      print(results)
    
[/code]

を実行すると

[code]

    ((datetime.date(2021, 3, 16), '4862-00-30'),)
    
[/code]

という感じでイレギュラーな文字を入れると文字列になったり date になったりします  
このデータをまた別のDBにインサートするときに型エラーが出てしまうのですが  
処理環境の問題から python 側でデータの型を１つ１つチェックするのはできれば避けたいです

MySQL 側で date にならないものは None にしたいのですが  
どういう条件ではじけばいいでしょうか

ちなみに homebrew で @5.7 でいれた MySQL 5.7.26 では NULL になってくれるのですが  
AWS RDS 上の 5.7.12 では '4862-00-30' となってしまいます

なのでバージョンあげれば解決する問題なんですが  
バージョン変更となると大規模な動作確認が必要になるのでいまの 5.7.12 上で動くようにしたいです

* * *

<https://docs.python.org/ja/3/library/datetime.html#date-objects>  
python のドキュメントを見ると

[code]

    MINYEAR <= year <= MAXYEAR
    
    1 <= month <= 12
    
    1 <= day <= 指定された月と年における日数
    
[/code]

となってるんですが pymysql が中でどう変換してるのかは調べてもわかりませんでした

mysql 側でこういうフィルターを簡単にかける方法はないでしょうか


CC BY-SA 4.0
2021-03-16T05:06:44.450
74690
2021-03-16T05:06:44.450
question
python mysql
mysql str_to_date で生成した date カラムが pymysql で型がかわってしまう