查看了本人jupyter的python的版本如下:
# 查python版本
import sys
print(sys.version)
原先安装的sqlalchemy版本为2.0.23:
使用to_sql将DataFrame数据导入mysql时失败了:
TypeError: __init__() got multiple values for argument ‘schema‘
问题:
似乎SQLAlchemy的版本2.0.0(2023年1月26日发布)与pandas的早期版本不兼容。
方法一:建议升级pandas版本到最新的版本。
pip install --upgrade pandas
方法二:将SQLAlchemy的版本往下降,这边我采取的方法就是这个
#sqlalchemy
!pip install sqlalchemy==1.4.46 -i https://pypi.tuna.tsinghua.edu.cn/simple
或
pip install sqlalchemy==1.4.46
导入数据不出错
import pymysql
from sqlalchemy import create_engine
import sqlalchemy
from sqlalchemy import types
def mapping_df_types(df):
dtypedict = {}
for i, j in zip(df.columns, df.dtypes):
if "object" in str(j):
dtypedict.update({i: types.VARCHAR(225)})
if "float" in str(j):
dtypedict.update({i: types.Float(precision=2, asdecimal=True)})
return dtypedict
dtypedict = mapping_df_types(dfA1_B2)
# 现在应该可以成功运行df.to_sql()方法了
# df.to_sql(name='test', con=con, if_exists='append', index=False, dtype=dtypedict)
#df = pd.DataFrame(v[1:],columns=v[0])
#自动转换数据类型
# df = df.infer_objects()
# print(df.dtypes)
#用完slwings包打开的excel后,需要及时关闭,不占用程序
# xls.close()
# app.quit()
try:
#fail:如果表存在Pass #replace:如果表存在,删了表,再建立一个新表,把数据插入 #append:如果表存在,把数据插入,如果表不存在创建一个表
dfA1_B2.to_sql(
name='王宁水',
con=database,
if_exists='append',
index=False,
dtype=dtypedict
)
print("已入库")
except Exception as e:
print("Error:", e)
print("入库失败")
print("请调试")
这边下载完,若是jupyter ,重启下kernel或者切换一次
方法三:安装sqlalchemy-databricks 以代替SQLAlchemy,前提把SQLAlchemy卸载干净,以防到时冲突报错。
#测试代码
import pandas as pd
from sqlalchemy import create_engine
import pymysql
pymysql.install_as_MySQLdb()#MySQL 8.0 以上
engine = create_engine('mysql+pymysql://<user>:<password>@localhost:3306/testDB')
sql_query = 'select * from test;'
df_read = pd.read_sql_query(sql_query, engine)