使用ConnectorX从含零日期的MySQL取数触发PanicException报错求助
问题:ConnectorX读取MySQL含零日期的datetime字段报错
使用ConnectorX从MySQL数据库加载数据时,数据库允许datetime列存在零日期值(如'0000-00-00 00:00:00'),对应SQL表字段类型为datetime。用Pandas读取数据无报错,但ConnectorX执行时触发如下错误:
PanicException Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_16620\2207944772.py in <module> 11 db_url="mysql://{user}:{pw}@localhost:{port}/{db}".format(user="cookie",pw="cookie123",db="mydb",port=3306) 12 query='Select * from reports_after_20230101 limit 20' ---> 13 iris=cx.read_sql(db_url,query) c:\Users\cbhattac\Anaconda3\envs\cookie\lib\site-packages\connectorx\__init__.py in read_sql(conn, query, return_type, protocol, partition_on, partition_range, partition_num, index_col) 222 raise ValueError("You need to install pandas first") 223 ---> 224 result = _read_sql( 225 conn, 226 "pandas", PanicException: Could not retrieve core::option::Option<chrono::naive::datetime::NaiveDateTime> from Value
解决建议
修改连接URL,添加sql_mode参数:在MySQL连接URL中追加
?sql_mode=ALLOW_INVALID_DATES,让ConnectorX将零日期视为合法值,示例代码:db_url="mysql://{user}:{pw}@localhost:{port}/{db}?sql_mode=ALLOW_INVALID_DATES".format(user="cookie",pw="cookie123",db="mydb",port=3306)在SQL查询中处理零日期:通过SQL语句将零日期转换为
NULL或合法日期,避免ConnectorX解析失败,示例查询:SELECT CASE WHEN datetime_col = '0000-00-00 00:00:00' THEN NULL ELSE datetime_col END AS datetime_col, -- 其他需要查询的字段 FROM reports_after_20230101 LIMIT 20升级ConnectorX到最新版本:部分旧版本对MySQL零日期的处理存在兼容性问题,执行以下命令升级:
pip install --upgrade connectorx
内容的提问来源于stack exchange,提问作者Chhandosee Bhattacharya
相关产品推荐
相关产品推荐

