python使用pandas导入excel数据到mysql

使用pandas导入excel数据到mysql

    • 需求
    • 过程
    • 解决
    • 结论
    • 代码

需求

公司业务需要我从excel中导入数据到mysql,说到数据处理,首先肯定是想到用pandas。

过程

一看是想着直接输入sql语句,查了查资料发现pandas有to_sql()方法。
但是使用后发现除了建表和插入数据外,没任何约束。
如果自动生成表后使用index作为主键很不利于后续据需导入数据。

解决

我试着把数据插入一张一存在的表中,会报错,这说明to_sql()只会插入数据而不会修改表结构,在错误信息中,我发现to_sql()是执行insert语句把DataFrame列标签作为数据表的列名,值作为值插入到指定表中,从中我得出了解决方案,自己建一个表,自己创建一个自增id主键加上DataFrame中列标签对应的列。

结论

只要dataframe.to_sql()参数中选定的表中包含有dataframe里对应的列,表列名=dataframe列名,数据类型相同,dataframe.to_sql()就能正常导入数据,要设定各种约束,自己创建一个符合要求的表即可。

代码

import pandas as pd
import numpy as np


# %%
# df = pd.read_excel('/home/dianhui/语法/初级语法.xlsx')
# df = pd.read_excel('/home/dianhui/语法/中级语法.xlsx')
df = pd.read_excel('/home/dianhui/语法/高级语法.xlsx')


# %%
print(df)


# %%
df0 = df.iloc[:,0:3]


# %%
print(df0)


# %%
df1 = df0.dropna(how = 'all')


# %%
df1


# %%
from sqlalchemy import create_engine


# %%
mysql_engine = create_engine(f"mysql+pymysql://root:[email protected]:3306/grammar") 


# %%

import sqlalchemy
df2 = df1.reset_index(drop=True)

df2.to_sql(name='high',con=mysql_engine.connect(),if_exists="append",index=False)
# CREATE TABLE middle (id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),UnitNum CHAR(100),Name CHAR(100),_explain CHAR(255));

你可能感兴趣的:(工具与常用代码查询,mysql,python)