pandas to_sql写入数据很慢

有个任务需要通过pandas向oracle写数据

最开始没加dtype,发现to_sql很慢,几百条数据都要十多秒;而且有时候会有如下莫名其妙的报错,但仔细检查数据发现数据是没问题的

  sqlalchemy_exception, with_traceback=exc_info[2], from_=e
	  File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
	    raise exception
	  File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/engine/base.py", line 1752, in _execute_context
	    cursor, statement, parameters, context
	  File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/dialects/oracle/cx_oracle.py", line 1347, in do_executemany
	    cursor.executemany(statement, parameters)
	sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-00932: inconsistent datatypes: expected DATE got CLOB

后面加上 to_sql 中加上 dtype 参数后,就快非常快了,上万条数据不到1s,而且同样的数据也没报错了。


解决问题时,发现几篇相关文章,记录下

  1. Pandas to_sql详解
    https://blog.csdn.net/weixin_44278512/article/details/102959370

  2. 嫌pandas的to_sql方法过慢?神方法让你一分钟搞定
    https://blog.csdn.net/chenKFKevin/article/details/72911525

import cStringIO
 
output = cStringIO.StringIO()
# ignore the index
df_a.to_csv(output, sep='\t',index = False, header = False)
output.getvalue()
# jump to start of stream
output.seek(0)
 
connection = engine.raw_connection() #engine 是 from sqlalchemy import create_engine
cursor = connection.cursor()
# null value become ''
cursor.copy_from(output,table_name,null='')
connection.commit()
cursor.close()

这个好像是专门针对postgresql 的
https://gist.github.com/catawbasam/3164289

  1. 关于pandas中to_sql性能太慢的优化
    https://blog.csdn.net/weixin_44313745/article/details/126994182
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值