使用pandas to_sql无法更新MySQL表问题求助
解决方法
先确认DataFrame是否有数据
执行print(sql_d.shape)和print(sql_d.head()),检查从Makes表查询出来的sql_d是否包含有效数据。如果查询结果为空,插入自然不会有数据。删除手动创建表的代码
你使用了if_exists='replace'参数,该参数会自动删除已存在的Brand表,再根据DataFrame的结构重建新表。之前手动创建表的操作完全多余,还可能引发表结构不匹配的问题。直接删除以下两行代码:mycursor = mydb.cursor() mycursor.execute('create table Brand (id int auto_increment primary Key, MakeId int(10), brand varchar(100))')确保数据库连接正确
核对create_engine中的user:password@host/database参数,确认用户名、密码、主机地址、数据库名称均正确。避免因连接到错误数据库,导致数据插入后无法在目标库中看到。使用事务上下文确保提交
改用engine.begin()上下文管理器执行插入,它会自动处理事务提交,避免因事务未提交导致数据未写入磁盘:from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://user:password@host/database') with engine.begin() as conn: sql_d.to_sql(name='Brand', con=conn, if_exists='replace', index=False)检查字段名大小写匹配
MySQL在Linux系统下区分字段名大小写,确认查询时使用的字段名与DataFrame列名一致。比如你查询得到的列是MakeID,若手动查询时写成MakeId,可能会找不到数据。
内容的提问来源于stack exchange,提问作者Thuy Nguyen
相关产品推荐
相关产品推荐

