Pymysql+Pandas+Sqlalchemy数据库更新脚本编写
#导入需要的包,使用pymysql操作数据库
#pandas包很强大,可以直接读取数据表,创建dataframe数据结构,同时可以直接将dataframe导出到数据库
#sqlalchemy创建引擎,与数据库进行连接
import pymysql
import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
from pandas import DataFrame
#把数据表导入数据库
def put_data(df1):
user = '***'
pwd = '***'
host = '***'
port = 3306
DB = '***'
#引擎:也就是实体数据库连接。传入参数:数据库类型+连接库+用户名+密码+主机,字符编码
conn = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(user, pwd, host, port, DB)
conn1 = create_engine(conn)
#to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.没错,在你写入库的时候,pymysql是不能用的!!!mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3!注意!!!to_sql函数并不在pd之中,而是在io.sql之中,是sql脚本下的一个类!!!所以to_sql的最好写法就是:
return pd.io.sql.to_sql(df1, name='***', con=conn1, if_exists='append')
#to_sql参数说明:(数据, '表名', con=连接键, schema='数据库名', if_exists='操作方式')? ? 操作方式有append、fail、replace、append:如果表存在,则将数据添加到这个表的##后面
df1 = pd.read_excel(r'***.xlsx')
put_data(df1)
#从数据库提取数据表
def get_data():
user = '***'
pwd = '***'
host = '***'
port = 3306
DB = '***'
conn = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(user, pwd, host, port, DB)
conn1 = create_engine(conn)
sql_cmd = 'SELECT * FROM ***'
return pd.read_sql(sql=sql_cmd, con=conn1)
df1 = get_data()
df1.to_excel(r'***.xlsx')