微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从具有已删除外键的表中选择导致 ProgrammingError: 1146, “Table <tablename> 不存在”

如何解决从具有已删除外键的表中选择导致 ProgrammingError: 1146, “Table <tablename> 不存在”

背景

我正在使用从旧版 sql 转储文件生成MysqL 数据库。一些表已从上述 sql 转储文件删除

我想做什么

我正在使用 sqlAlchemy 和 pyMysqL 来选择行,然后通过 the official tutorial

from sqlalchemy import create_engine,select,MetaData,Table
import pyMysqL

Metadata = MetaData()
db_connection_str = f'MysqL+pyMysqL://{db_user}:{db_password}@localhost/{db_name}'
db_connection = create_engine(db_connection_str)
test_table = Table(<table_name>,Metadata,autoload_with=db_connection)

有效,但不适用于所有表。对于一个特定的表(存在于数据库中),它会抛出这个错误

ProgrammingError: (pyMysqL.err.ProgrammingError) (1146,"Table '<missing_table_name>' doesn't exist")
[sql: SHOW CREATE TABLE `<missing_table_name>`]
(Background on this error at: http://sqlalche.me/e/14/f405)

现有表还包含一个 MUL Key 列,其描述表明它指向 <missing_table_name>。在导出 sql 转储文件之前,<missing_table_name> 似乎已被删除

是否有一种解决方法可以让我从现有表中选择行?

解决方法

我偶然发现了 this somewhat-related answer,这让我怀疑 Table 是否采用类似的参数来禁用外键检查。根据文档,这不会引发上述错误:

test_table = Table('<table_name>',metadata,autoload_with=db_connection,resolve_fks=False)

但是,我不确定它是否允许我使用基于外键的查询。确认后会将此问题标记为已回答。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。