今天遇到了一个问题,很是奇怪,自己也想了一个另类的方法将其解决了,现在将详细过程经过记录如下:

  我在处理完一个dataframe之后,需要将其写回到数据库。这个dataframe比较大,共有53列,72609行,使用下述代码尝试将其写入mysql数据库。

pd.io.sql.to_sql(df,'xxx',zh_con,flavor='mysql',if_exists='append',index=False)

  然后就报错了,错误如下:

Traceback (most recent call last):
File "/home/fit/PycharmProjects/Decision_Tree_Rough_sets_theory/main/handle_data.py", line 33, in <module>
pd.io.sql.to_sql(df,'A_stock_quarter_total',zh_con,flavor='mysql',if_exists='append',index=False)
File "/home/fit/.pyenv/versions/2.7.11/lib/python2.7/site-packages/pandas/io/sql.py", line 569, in to_sql
chunksize=chunksize, dtype=dtype)
File "/home/fit/.pyenv/versions/2.7.11/lib/python2.7/site-packages/pandas/io/sql.py", line 1634, in to_sql
table.insert(chunksize)
File "/home/fit/.pyenv/versions/2.7.11/lib/python2.7/site-packages/pandas/io/sql.py", line 765, in insert
self._execute_insert(conn, keys, chunk_iter)
File "/home/fit/.pyenv/versions/2.7.11/lib/python2.7/contextlib.py", line 35, in __exit__
self.gen.throw(type, value, traceback)
File "/home/fit/.pyenv/versions/2.7.11/lib/python2.7/site-packages/pandas/io/sql.py", line 1525, in run_transaction
self.con.rollback()
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')

  在互联网上没有找到任何解决方法,尝试将dataframe行数缩减,成功的写入了数据库。于是我想到利用循环分批次将数据写入数据库,如下:

l=0
r=100
length =len(df)
while(l<length):
pd.io.sql.to_sql(df[l:r],'xxx',my_con,flavor='mysql',if_exists='append',index=False)
l+=100
r+=100

  问题成功解决!就是暂时不知道真实的错误原因,需要进一步探讨。

  今天再次遇到这个问题,google了一下,在stackoverflow上面找到了答案.可以通过指定chunksize参数的方式来进行大批量插入,pandas会自动将数据拆分成chunksize大小的数据块进行批量插入,其实原理类似于我在上面使用的循环插入法.在不指定这个参数的时候,pandas会一次性插入dataframe中的所有记录,mysql如果服务器不能响应这么大数据量的插入,就会出现上述错误.附上正确的插入姿势:

pd.io.sql.to_sql(df,'xxx',zh_con,flavor='mysql',if_exists='append',index=False,chunksize=10000)
#此处的chunksize可以自定义

python pandas dataframe to_sql方法error及其解决的更多相关文章

  1. Python DataFrame to_sql方法插入日期或时间类型的数据时 报ORA-01861 文字与字符串不匹配 的解决方法

    业务团队近期提出一个需求: 希望在接口调用之前先批量插入Excel中的数据作为数据预置 这个需求以前已经开发完成 本来以为可以很快调试完毕 没成想遭遇一个难关 DataFrame.to_sql方法在执 ...

  2. Python pandas DataFrame操作

    1. 从字典创建Dataframe >>> import pandas as pd >>> dict1 = {'col1':[1,2,5,7],'col2':['a ...

  3. Python pandas.DataFrame调整列顺序及修改index名

    1. 从字典创建DataFrame >>> import pandas >>> dict_a = {'],'mark_date':['2017-03-07','20 ...

  4. Python Pandas -- DataFrame

    pandas.DataFrame class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) ...

  5. 史上最详细 Python第三方库添加方法 and 错误解决方法

    (1):如何添加python第三方库(方法一): File ->> Settings... ->> Project Interpreter (2):如何添加python第三方库 ...

  6. python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix

    先手工生出一个数据框吧 import numpy as np import pandas as pd df = pd.DataFrame(np.arange(0,60,2).reshape(10,3) ...

  7. 【Python打包成exe方法】——已解决导入第三方包无法打包的问题

    ​ 前言 在我们写代码的过程中,我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安 ...

  8. python pandas.DataFrame.append

    1.使用append首先要注意的是,你要合并两个DataFrame的columns即列名是否是相同的,不相同的就会报错. 2.我们会发现DataFrame的列名是不能够重复的,而行名(index)是可 ...

  9. python pandas dataframe 操作记录

    从数据看select出数据后如何转换为dataframe df = DataFrame(cur.fetchall()) 如何更改列名,选取列,进行groupby操作 df.columns = ['me ...

随机推荐

  1. 【转】bootstrap 的 affix.js 插件

    我觉得 Twitter Bootstrap 提供的 JavaScript 插件可用性非常高,但文档多数简单.按部就班操作了,有效果当然好,没效果的话简直不知道为什么.之前我写过 Scrollspy 用 ...

  2. [code]字母重排

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  3. rowcommand事件中获取控件

    //根据当前按钮生成命名空间 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)        ...

  4. Source

    转载自:http://blog.csdn.net/u014084081/article/details/44617707 Guide iOS Developer Library 教程 Ray Wend ...

  5. 创业手记 Mr.Hua

    <MR.HUA 创业手记>这本书期盼了很久,也看了很久,每每回味都是意犹未尽,仔细研读,真有醍醐灌顶之意.如果说没有跟Mr.Hua结识,那真该庆幸自己得以拜读.我把自己觉得华哥不错的句子摘 ...

  6. C#读取word文件

    第一步:添加对在项目引用里添加上对Microsoft Word 11.0 object library的引用.右击--引用---在com标签下添加.

  7. Ketama Consisent Hash

    问题描述 有一些目标节点 v1, v2...vn 需要一个算法,能够将任意key映射到目标节点中的一个vx 评价方式 1. 对于一个比较大的key集合,分布在各个目标节点的key的数量要尽可能均匀 2 ...

  8. Java谜题心得

    1,二进制浮点数的运算是对实际算数的一种近似运算. 2,IEEE 754浮点算术保留了一个特殊的值用来表示一个不是数字的数量[IEEE 754].这个值就是NaN(“不是一个数字(Not a Numb ...

  9. jar2exe 配置jre

    http://www.regexlab.com/zh/jar2exe/support.htm

  10. Hibernate---基础配置

    hibernate.cfg.xml里可以设置一个值显示更详细的sql语句: <property name="format_sql">true</property& ...