mysql - 从删除外键的表中选择会导致 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)
现有表还包含一个MUL
Key 列,其描述表明它指向<missing_table_name>
。似乎<missing_table_name>
在导出 SQL 转储文件之前已删除。
是否有一种解决方法可以让我从现有表中选择行?
解决方案
我偶然发现了这个有点相关的答案,这让我想知道是否Table
采取了类似的论点来禁用外键检查。根据文档,这不会引发上述错误:
test_table = Table('<table_name>', metadata, autoload_with=db_connection,resolve_fks=False)
但是,我不确定它是否允许我使用基于外键的查询。一旦得到确认,就会将此问题标记为已回答。
推荐阅读
- r - R中的JSON格式拒绝解析?
- node.js - Node.js 如何正确抛出错误?
- c# - System.Xml.XmlException:引用未声明的实体“nbsp”
- sql - 从存储过程返回表 - SQL Server
- java - Spring-MVC项目中实体错误映射中的重复列
- wordpress - cPanel 中的图像问题
- rest - 骆驼拆分并行处理聚合消息
- angular - Angular2 StockChart 抛出运行时错误 - 'chart',因为它不是 'div' 的已知属性
- php - PHP 会话冲突
- css - 使用纯 CSS 倾斜 div 并允许图像填充倾斜区域