MySql & Sqlalchemy - 并非所有外键都可见

标签 mysql sqlalchemy foreign-keys

我在 MySql Workbench 中的一个表的外键列表是空的。当我尝试添加丢失的 FK 时,我得到了这个结构的错误:

Executing:
ALTER TABLE <schema>.<table>
ADD INDEX <index_name> (<column_name> ASC);
ALTER TABLE <schema>.<table_name> 
ADD CONSTRAINT <constraint_name>
  FOREIGN KEY (<column_name>)
  REFERENCES <schema>.<ref_table_name> (<ref_column_name>)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

Operation failed: There was an error while applying the SQL script to the database.
ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (<schema>.`#sql-49f_6`, CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>) REFERENCES <ref_table_name> (<ref_column_name>) ON DELETE CASCADE ON UPDATE CASCADE)
SQL Statement:
ALTER TABLE <schema>.<table_name> 
ADD CONSTRAINT <constraint_name>
  FOREIGN KEY (<column_name>)
  REFERENCES <schema>.<ref_table_name> (<ref_column_name>)
  ON DELETE CASCADE
  ON UPDATE CASCADE

显然,我要创建的外键似乎已经在数据库中了。 Web 上的一些研究让我相信在某些情况下 MySql Workbench 不会列出所有外键(出于各种原因),这对于我的设置可能也是如此。因此,我尝试使用此查询列出我尝试修改的表中的所有外键:

SELECT *
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  constraint_schema = <schema> AND table_name = <table_name> AND   
  referenced_table_name IS NOT NULL;

结果集和Workbench外键列表一样空...

查看错误消息,我的数据库周围似乎有一个奇怪的表,名为 #sql-49f_6。 这张表不是我明确创建的。 也就是说,我正在使用 sqlalchemy 来创建和管理我的数据库,因此所有这些都可能是由于 sqlalchemy 模型定义所致,如下所示:

TableName = Table(<table_name>,
    table_base.metadata,
    Column(
        <column_name_1>, 
        Integer(), 
        ForeignKey('<ref_table_name>.<ref_column_name>', onupdate='CASCADE', ondelete='CASCADE'), 
        nullable=False
    ),
    Column(
        <column_name_2>, 
        Integer(), 
        ForeignKey('<ref_table_name_2>.<ref_column_name_2>', onupdate='CASCADE', ondelete='CASCADE'), 
        nullable=False
    )
)

综上所述,有人能提出解决方案吗?

最好不必重新创建数据库;因为,我需要维护表中包含的数据。

最佳答案

我无法找到上述问题的根源。 急需解决办法,我暂时将有问题的表所包含的数据离线存储,然后从头开始重新创建。在此步骤中,我还添加了外键缺失。问题没有持续存在。抱歉,我无法阐明最初出了什么问题。

关于MySql & Sqlalchemy - 并非所有外键都可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44970679/

相关文章:

mysql - 如何在 sequelize 迁移中使用 BLOB 数据类型

python - 如何在 SQLAlchemy 中查询关联表?

python - 不同类型的 SQLAlchemy 列同义词

mysql - 为什么 `MUL` 关键字出现在 `Key` mysql 命令的 `show columns from Employee` 列下?

python - SQLAlchemy ON DELETE SET NULL 同时使用辅助表

php - 管理注册网站 Cron 作业的最佳方式

mysql - 我如何从 MySQL 中的 CASE 语句中获取结果?

mysql - 遍历具有变量名的不同表

python - 如何使用额外方法扩展 SQLAlchemy 绑定(bind)声明模型?

django - 访问 Django 模型中外键的​​ __unicode__ 字段