【问题标题】:SQLAlchemy: check data existence in other table before insert data to not using foreign keySQLAlchemy:在插入数据以不使用外键之前检查其他表中的数据是否存在
【发布时间】:2019-06-18 08:14:34
【问题描述】:
我正在做一个新项目,我们决定使用 Flask、SQLAlchemy、Mysql。我已经习惯了使用外键,但是这次 DBA 告诉我们不能使用外键。所以我想在插入或更新数据之前检查其他表中是否存在数据以保持数据的干净和纯净。我可以写一些代码来检查一下,但我想知道是否有办法检查 SQLAlchemy 或烧瓶上的数据是否存在,因为使用该表的任何类型的 API 总是必须检查数据是否存在,这将是浪费出于一个原因实现相同的代码。
另外,我想知道这种情况是否常见(限制使用外键)
【问题讨论】:
标签:
python-3.x
flask
foreign-keys
flask-sqlalchemy
【解决方案1】:
目前还不完全清楚发生了什么,但我会猜测一下。
如果这个新项目使用完全独立的数据库,则可能无法为原始数据库中的表强制执行外键。 (这并不意味着您不能拥有具有相关 id 的列,只是您无法确保指向的行仍然存在。) MySQL does allow 外部数据库中的外键,但似乎有一些约束。例如,如果数据库位于不同的机器上,这可能不可用。在这种情况下,您将需要有第二个数据库连接/API 调用,并使用它在原始数据库中搜索,以在添加对象之前验证新数据。并且在使用该 id 之前,您需要检查它是否仍然存在,如果不存在则处理错误。
但实际上,我认为您需要回到 DBA 并请他/她解释为什么这是不可能的。然后让这个人提出替代方案。