关于pandas中to_sql性能太慢的优化

pd.to_sql(table_name, db)这种方法虽然很简单,但是性能特别慢;插入6万条数据,需要将近5分钟

engine = sqla.create_engine('postgresql+psycopg2://user:pwd@IPCLOUDMAP')
df = pd.read_excel(filename, skiprows=0)
df.to_sql('yun_ying_jian_ce_2', engine, index=False, if_exists='append')

优化方法,利用StringIO,和copy_from , 此方法可在1.68s内将数据插入表中

from io import StringIO # 此处有的会使用 from cStringIO import StringIO 

engine = sqla.create_engine('postgresql+psycopg2://user:pwd@IPCLOUDMAP')
df = pd.read_excel(filename, skiprows=0)
df.to_sql('yun_ying_jian_ce_2', engine, index=False, if_exists='append')

 output = StringIO()
 df.to_csv(output, sep='\t', index=False, header=False)
 output.getvalue()
 output.seek(0)
 connection = engine.raw_connection()
 cursor = connection.cursor()
 cursor.copy_from(output, 'yun_ying_jian_ce_2', null='')
 connection.commit()
 cursor.close()

注意sqlServer就别想使用 这种方法了,因为pyodbc没有copy_from , copy_from是pg的特性,有哪位大佬解决了sqlServer 使用copy_from,恭候留言

engine = sqla.create_engine('mssql+pyodbc://sa:pwd#@IP:1433/CLOUDMAP?driver=SQL+Server')

AttributeError: 'pyodbc.Cursor' object has no attribute 'copy_from'
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
pandas是一个非常流行的数据分析库,它提供了to_sql函数来将dataframe数据保存到数据库。to_sql函数需要一个连接对象和数据表名称作为参数。 首先,我们需要使用Python的数据库驱动程序来连接数据库,例如MySQL数据库可以使用pymysql库,PostgreSQL可以使用psycopg2库。 接下来,我们需要使用pandas的read_sql函数从数据库读取数据到dataframe,然后做一些数据处理。处理完成后,我们可以使用to_sql函数将dataframe数据保存回数据库。在to_sql函数,我们需要指定数据表的名称,还可以设置查询的模式(append, replace或fail)。 以下是一个简单的例子: ``` import pymysql import pandas as pd # 创建数据库连接 conn = pymysql.connect(host='localhost', user='root', password='123456', database='testdb', port=3306) # 读取数据到dataframe df = pd.read_sql("SELECT * FROM student", conn) # 处理数据 df = df[df['age']>18] # 将数据保存回数据库 df.to_sql(name='student_filtered', con=conn, if_exists='replace', index=False) # 关闭连接 conn.close() ``` 在这个例子,我们首先连接到MySQL数据库,然后使用pandas的read_sql函数从student表读取数据到dataframe。接下来,我们根据age列的值筛选数据。最后,我们使用to_sql函数将筛选后的数据储存在student_filtered表。if_exists参数设置为replace,表示如果表已经存在,则该表会被替换。最后,我们关闭数据库连接。 pandas的to_sql函数简单易用,可以方便地将dataframe数据保存到数据库。如果我们需要频繁地保存dataframe数据到数据库,就需要熟练使用to_sql函数,并对数据库连接有一定的了解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值