使用 MySQL 数据库查找导致 sqlalchemy.exc.IntegrityError 的违规值

我正在尝试使用 sqlalchemy 引擎使用 to_sql 将大型 pd.DataFrame 上传到 MySQL 服务器(innodb 版本“5.7.32”)。简化的命令看起来有点像下面:

pd_engine = sqlalchemy.create_engine("mysql+pymysql://" + user + ":" + pw + "@" + host + "/" + database)
df.to_sql(database_table_name,pd_engine,index=False,if_exists='append')

问题是目标表受外键约束,我尝试上传的数据可能违反了这些约束。使用上面的代码,我得到的错误类似于

sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1452,'Cannot add or update a child row: a foreign key constraint fails (`<db_name>`.`<database_table_name>`,CONSTRAINT `<constraing name>` FOREIGN KEY (`<column>`) REFERENCES `<other_table>` (`<other_table_column>`) ON DELETE CASCADE ON UPDATE CASCADE)')

其中标有 <...> 的部分填充了各自的值。

问题是错误消息没有告诉我哪个值是有问题的,而且 df 中的数据可能非常大。有没有办法轻松做到这一点?我能想到的唯一方法是解析错误消息,查询另一个表,然后在 Python 中检查丢失的键。鉴于这应该是一个相当常见的问题,而且数据库可能会变得非常大:有没有更好的选择?

关于此主题,我在 SO 上唯一能找到的是 this,但他们只查找列而不是实际值。

提前致谢!

kabenxiagu 回答:使用 MySQL 数据库查找导致 sqlalchemy.exc.IntegrityError 的违规值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1025422.html

大家都在问