使用多个表中的数据设置唯一约束(SQL / SQLAlchemy)

10 投票
2 回答
2724 浏览
提问于 2025-04-16 03:06

有一个叫做 Parametric 的顶级类,用来创建可以有参数的对象:

class Parametric(object):
 def __init__(self, name):
  self.name = name
  self.pars = []

class Foo(Parametric):
 def __init__(self, name, prop):
  self.prop = prop
  Parametric.__init__(self, name)

class Bar(Parametric):
 def __init__(self, name, prop):
  self.prop = prop
  Parametric.__init__(self, name)

我使用 SQLAlchemy 作为我的 ORM 引擎。

我想要设置一个 UNIQUE 约束,确保在某个类中,(name, prop) 的组合是唯一的(比如说,只有一个 Foo 实例可以叫做 "my_foo",并且它的 prop 值可以是 "my_prop"),但是我不知道怎么在 Foo 表的 UNIQUECONSTRAINT 部分引用 Parametric 中的 name 列。

这个唯一性约束是否可以通过 FOREIGN KEY 指令来实现呢?

2 个回答

0

如果有两个不同的表格,你可以在表单验证的时候检查一下是否有重复的内容。

5

你可以使用单表继承来实现这个功能。不过,如果你的两个列在不同的表里,那就不能完全按照你想的方式来做(因为在不同的表之间无法设置唯一约束)。

如果单表继承不适合你,那你可能需要选择两种方法中的一种:(1) 在Python中强制执行唯一性,或者 (2) 放弃SQLAlchemy的继承,直接使用外键将Foo和Bar与Parametric关联起来。你可以将外键指向name,然后在nameprop上设置唯一约束。

撰写回答