使用Pandas to_sql()写入MySQL触发AssertionError:schema非空断言错误
解决Pandas to_sql()操作MySQL时的
assert schema is not None断言错误 这个错误的核心原因是MySQL的SQLAlchemy连接未明确指定目标数据库(schema),to_sql()在检查表是否存在的逻辑中,需要明确知道要操作的数据库,否则会触发该断言。
具体解决方案:
方案1:在连接URL中包含目标数据库名
你的SQLAlchemy连接URL必须指定已存在的数据库,格式如下:url = "mysql+pymysql://你的用户名:你的密码@主机地址:端口号/目标数据库名"修改后的完整代码示例:
from sqlalchemy import create_engine import pandas as pd # URL中加入已创建的目标数据库 url = "mysql+pymysql://root:123456@localhost:3306/your_db" my_conn = create_engine(url) # 注意路径用raw字符串避免转义问题 data = pd.read_csv(r"D:\Souce_files\sample_CSV\email.csv", sep=';', header=0) data.to_sql(con=my_conn, name='Landing_layer', if_exists='append', index=False)方案2:调用to_sql()时显式指定schema参数
如果连接URL未包含数据库名,可以在to_sql()中通过schema参数指定目标数据库:data.to_sql( con=my_conn, name='Landing_layer', if_exists='append', index=False, schema='your_db' # 替换为你的目标数据库名 )
额外注意事项:
- 目标数据库必须提前在MySQL中手动创建,Pandas只会自动创建表(当表不存在时),不会自动创建数据库。
- 若使用旧版本的Pandas或SQLAlchemy,可能存在兼容性问题,建议升级到稳定版:
pip install --upgrade pandas sqlalchemy pymysql
内容的提问来源于stack exchange,提问作者Rohit Kushwaha
相关产品推荐
相关产品推荐

