首页 > 解决方案 > Python更快的方法将每一行数据帧作为一个表插入到mysql

问题描述

我有这样的数据框,超过 300 行

         name price percent  volume      Buy       Sell
1        BID   41.30 -0.36    62292.0     604.0   6067.0
2        BVH   49.00 -1.01    57041.0    3786.0   3510.0
3        CTD   67.80  6.94    68098.0    2929.0    576.0
4        CTG   23.45  0.43   298677.0   16965.0  20367.0
5        EIB   18.20 -0.27    10517.0     306.0    210.0

对于每个名称,我在 mysql 中创建 1 个表。到目前为止,这是我的代码。

vn30 = vn30_list.iloc[:, [10,13,12,15,25,26]].dropna(how='all').fillna(0)
data = vn30_list.iloc[:, [13,12,15,25,26]].dropna(how='all').fillna(0)

data.columns = ['gia','percent','khoiluong','nnmua','nnban']
en = sa.create_engine('mysql+mysqlconnector://...', echo=True)

#insert into mysql
for i in range(30):
    macp = vn30.iloc[i][0].lower()
    #print(row)
    compare_item = vn30.iloc[i][1]
    if compare_item == data.iloc[i][0]:
        row = data.iloc[i:i + 1, :]
        #print(row)
        row.to_sql(name=str(macp), con=en, if_exists= "append", index=False,schema="online")

有没有办法让它更快地处理 300 行?太感谢了。对不起我的英语。

标签: pythonmysqlpandasdataframeinsert

解决方案


# import the module
from sqlalchemy import create_engine

# create sqlalchemy engine
engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}".format(user="root",pw="12345",db="employee"))

# Insert whole DataFrame into MySQL
data.to_sql('book_details', con = engine, if_exists = 'append', chunksize = 1000)

您可以在此处获取所有详细信息:https ://www.dataquest.io/blog/sql-insert-tutorial/


推荐阅读