简介
在使用python作数据分析的时候,不免会用到pandas,而pandas与数据库(mysql)的交互在速度上一直是一个瓶颈
通过网上的一些笔记,发现了一些加速的方法,目前来看都是不可用的。
记录
先随便生成一个100w行的文件,在实际工作中远远高于100w。
#10进制转化成ip地址
def int2ip(x):
return '.'.join([str(int(x)//(256**i)%256) for i in range(3,-1,-1)])
fp=open('1.csv','w')
fp.write('ip,score,id\n')
n=1000000
for i in range(1,n):
fp.write(f'{int2ip(i)},{i},{i}\n')
fp.close()
插入数据库方式及时间
df.to_sql('cellfee',con=engine,if_exists='replace',index=True)
# 11.4s
df.to_sql('cellfee',con=engine,if_exists='replace',index=True,chunksize=50000)
# 11.3s
df.to_sql('cellfee',con=engine,if_exists='replace',index=True,chunksize=50000,method='multi')
# 46.1s
from sqlalchemy import event
@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
if executemany:
cursor.fast_executemany = True
df.to_sql('cellfee',con=engine,if_exists='replace',index=True)
# 11.7s
不知道是使用方法有问题还是怎么回事,mysql加速完全没有效果,暂时放弃了。