本文主要是介绍【Python】“pandas”库“to_sql”报错“Invalid MySQL identifier”处理记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近又要帮客户写脚本拉一份统计日报,就先把一堆一堆的小SQL写好测好后,准备用Python封装一下。但是用到第三方“pandas”模块的“to_sql”方法往MySQL数据库写数据时,却报了“Invalid MySQL identifier”无效标识符的错。在网上找了一下,经过尝试,顺利解决。
参考SO,http://stackoverflow.com/questions/30586292/valueerror-mysql-identifier-cannot-be-entirely-numeric-with-pandas-to-sql,最简单粗暴的办法就是注掉模块安装包(例如我的在C:\Python27\Lib\site-packages\pandas\io\sql.py)源码关于报错检查的定义。即
# for c in uname:
# if not re.match(basere, c):
# if not (0x80 < ord(c) < 0xFFFF):
# raise ValueError("Invalid MySQL identifier '%s'" % uname)
我的环境是Python5.7.12 + pandas0.18.0,正如源码文件注释中以及SO中所提到,这个报错检查是为了“Filter for unquoted identifiers”,过滤在表名、字段名中使用不符合MySQL要求的标识符,主要就是数字了(我的情况就是字段名使用的是阿拉伯数字形式的“年月日”)。但是按照源码文件注释中的参考文档(http://dev.mysql.com/doc/refman/5.0/en/identifiers.html),这段代码是基于MySQL5.0版本的。我的MySQL版本是5.6,包括新版的5.7及至开发中的8.0,其实表名和(或)字段名包括或者全部数字都是完全支持的。所以,这是pandas库亟待修复的BUG了https://github.com/pydata/pandas/issues/13206。
这篇关于【Python】“pandas”库“to_sql”报错“Invalid MySQL identifier”处理记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!