不存在”,mysql,sqlalchemy,orm,foreign-keys,pymysql"/>

首页 > 解决方案 > 从删除外键的表中选择会导致 ProgrammingError: 1146, "Table不存在”

问题描述

背景

我正在使用从旧版 SQL 转储文件生成的 Mysql 数据库。一些表已从所述 SQL 转储文件中删除。

我正在尝试做的事情

我正在使用 SQLAlchemy 和 pymysql 来选择行,并按照官方教程进行:

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)

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

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

标签: mysqlsqlalchemyormforeign-keyspymysql

解决方案


我偶然发现了这个有点相关的答案,这让我想知道是否Table采取了类似的论点来禁用外键检查。根据文档,这不会引发上述错误:

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

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


推荐阅读