如何防止表中的某些值组合源自表中已有的值?

伊兹里克

我正在开发一个用于存储和管理任务的Web应用程序,使用Flask-SQLAlchemy与后端通信。我想使用一个表来存储任务对之间的优先级比较,以构造部分排序该表将具有两列,一列用于较小的元素,一列用于较大的元素,并且这两列将共同构成主键。

到目前为止,我的代码如下所示:

class PriorityPair(db.Model):
    lesser_id = db.Column(db.Integer, db.ForeignKey('task.id'),
                          primary_key=True)
    lesser = db.relationship('Task', remote_side=[id])
    greater_id = db.Column(db.Integer, db.ForeignKey('task.id'),
                           primary_key=True)
    greater = db.relationship('Task', remote_side=[id])

    def __init__(self, lesser, greater):
        self.lesser = lesser
        self.greater = greater

总而言之,这足以满足我对表的处理需求,但是存在一个问题,即可能会插入不一致的行。假设我有两个任务,A和B。如果任务A的优先级高于任务B,则可以执行以下操作:

pair = PriorityPair(task_b, task_a)
db.session.add(pair)
db.session.commit

两者之间的关系将按需要存储。但是,如果将来PriorityPair(task_a, task_b)在表中插入相反的关系,那将是不一致的。两个任务的重要性不能同时超过彼此。

现在,我可能可以在python代码中防止出现这种情况,但是我想确保可以保证数据库表本身保持一致。是否可以(通过Flask-SqlAlchemy)在表上放置某种约束,以便如果该约束(A,B)已经存在,(B,A)则将被自动拒绝?这样的约束是否可以跨数据库后端使用?

伊兹里克

不,不

这不可能。SqlAlchemy支持CHECK约束,但是check的表达式以字符串形式给出。它将需要一个子查询,例如(greater_id, lesser_id) not in (select sub.lesser_id, sub.greater_id from priority_pair as sub)基础数据库后端将阻止它:

相反,您必须找到其他解决方案,无论是触发器还是仅更改整个模型,这都是我决定要做的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何防止表中的某些值组合源自表中已有的值?

来自分类Dev

查找表中没有的值

来自分类Dev

如何根据字典中已有的内容将键和值迭代到字典中

来自分类Dev

Nifi:如何将流文件连接到目录中已有的表?

来自分类Dev

获取表中已有键的值的索引(选择随机键/值对)

来自分类Dev

如何从现有的2表创建表中的默认值在oracle中

来自分类Dev

如何防止Maven为回购中已有的工件下载maven-metadata.xml?

来自分类Dev

如何选择一个表中存在但另一个表中没有的值?

来自分类Dev

如何使用外键将值插入到现有的 SQL Server 表中

来自分类Dev

如何仅将某些字段插入到 hive 表中,重用现有的表架构?

来自分类Dev

如何检查SQL Server表中列值的组合

来自分类Dev

在mySQL中组合表以保持空值

来自分类Dev

如何使用VBA检查excel表中的行是否具有某些值

来自分类Dev

如何从表中删除其中有Caluse的仅某些列值

来自分类Dev

计算SAS表中行中的某些值

来自分类Dev

如何使用for语句C#在列表框中获取我所有的数据库表值

来自分类Dev

如何更改现有的Hive表的FIELD TERMINATED值?

来自分类Dev

C#-如何在组合框datagridview中的表中将值设置为默认值?

来自分类Dev

C#-如何在组合框datagridview中的表中将值设置为默认值?

来自分类Dev

如何修复在 reactjs 中验证材料 ui 表中的某些值并验证一些新添加的表值

来自分类Dev

如何确定表中是否存在某些行组合

来自分类Dev

如何选择某些哈希表值,但在Powershell脚本中内联更改其他值

来自分类Dev

唯一值约束,表中具有多个列,而不是Oracle中的组合

来自分类Dev

如何防止所有过滤出的行标签值出现在数据透视表中?

来自分类Dev

在Access VBA中,如何从表的多个列中获取DISTINCT值作为组合框的行源?

来自分类Dev

如何防止在搜索查询中返回某些值?

来自分类Dev

如何选择相关表中具有多个值的记录?

来自分类Dev

如何获取具有哈希表的列表中的键的值

来自分类Dev

如何选择表中具有重复值的行?

Related 相关文章

  1. 1

    如何防止表中的某些值组合源自表中已有的值?

  2. 2

    查找表中没有的值

  3. 3

    如何根据字典中已有的内容将键和值迭代到字典中

  4. 4

    Nifi:如何将流文件连接到目录中已有的表?

  5. 5

    获取表中已有键的值的索引(选择随机键/值对)

  6. 6

    如何从现有的2表创建表中的默认值在oracle中

  7. 7

    如何防止Maven为回购中已有的工件下载maven-metadata.xml?

  8. 8

    如何选择一个表中存在但另一个表中没有的值?

  9. 9

    如何使用外键将值插入到现有的 SQL Server 表中

  10. 10

    如何仅将某些字段插入到 hive 表中,重用现有的表架构?

  11. 11

    如何检查SQL Server表中列值的组合

  12. 12

    在mySQL中组合表以保持空值

  13. 13

    如何使用VBA检查excel表中的行是否具有某些值

  14. 14

    如何从表中删除其中有Caluse的仅某些列值

  15. 15

    计算SAS表中行中的某些值

  16. 16

    如何使用for语句C#在列表框中获取我所有的数据库表值

  17. 17

    如何更改现有的Hive表的FIELD TERMINATED值?

  18. 18

    C#-如何在组合框datagridview中的表中将值设置为默认值?

  19. 19

    C#-如何在组合框datagridview中的表中将值设置为默认值?

  20. 20

    如何修复在 reactjs 中验证材料 ui 表中的某些值并验证一些新添加的表值

  21. 21

    如何确定表中是否存在某些行组合

  22. 22

    如何选择某些哈希表值,但在Powershell脚本中内联更改其他值

  23. 23

    唯一值约束,表中具有多个列,而不是Oracle中的组合

  24. 24

    如何防止所有过滤出的行标签值出现在数据透视表中?

  25. 25

    在Access VBA中,如何从表的多个列中获取DISTINCT值作为组合框的行源?

  26. 26

    如何防止在搜索查询中返回某些值?

  27. 27

    如何选择相关表中具有多个值的记录?

  28. 28

    如何获取具有哈希表的列表中的键的值

  29. 29

    如何选择表中具有重复值的行?

热门标签

归档