Weaving Wong

总觉得该写点啥...

嗨,我是Weaving,一名机器学习爱好者.


分享读书、学习、生活感悟

bug记录 - mysql写入dataframe注意事项

报错信息:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1054, “Unknown column ‘index’ in ‘field list’”) [SQL: ‘INSERT INTO uc_anti_cheat_rule (index, id, name, description, remark) VALUES (%(index)s, %(id)s, %(name)s, %(description)s, %(remark)s)’] [parameters: ({‘index’: 0, ‘id’: ‘8’, ‘name’: ‘User4’, ‘description’: ‘22’, ‘remark’: ‘ddd’}, {‘index’: 1, ‘id’: ‘9’, ‘name’: ‘3’, ‘description’: ‘5’, ‘remark’: ‘44’})] (Background on this error at: http://sqlalche.me/e/2j85)

解决方案: 因为df在写入mysql时会将index也写入,所以需要删除索引,或者将索引的名字改成id

df1.set_index(["id"], inplace=True)

df.read_csv(filename ,  index = False)

重命名级别名称:
df1.index.names = ['index']
df1.columns.names = ['column']
  • 解决方案更新
在pd.to_sql的接口中有一个参数为index,将其设置为False 

pd.to_sql(index=False)
# 问题即可解决
# 说明:由于dataframe 默认写入数据库时带有索引列,所以当数据库中存在默认id列时,会出现列数不匹配

总结

  • 遇到问题还是要先看官方文档,网络上的解决方案可能不适用自己遇到的情况
最近的文章

Python(1)--MySQL数据库中非法时间字段的处理方法

1.MySQL中常用时间数据类型范围大小由于不同的数据结构类型导致能够显示的范围不一样,如果在工作中使用范围较小的类型,当输入的时间范围不够规范时,容易导致程序抛出异常,中断进程的运行。下面给大家列出MySQL中常用的数据格式的范围:datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01...…

python继续阅读
更早的文章

正则表达式工具

这里给大家推荐一个在线验证的正则表达式工具:http://regexr.com/另外以下是相应的总结,系转载。…

Python继续阅读