欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python使用pandas导入excel数据到mysql

程序员文章站 2022-06-11 10:47:20
...

使用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));