在django或数据库中检查约束的位置?

Der*_*rek 6 python sql django postgresql

在考虑表现时,

1)在python/django或数据库中实现和检查约束是否更好?或两者兼而有之?

2)在django,哪里最好检查约束?例如在模型保存功能?

小智 7

Django已经直接在数据库级别实现了主要/外键和唯一(对于单个字段或组合)的通用约束.对于更具体的约束,放置它们的最佳位置是Django的模型验证方法.这样您就可以利用Django的功能,例如模型继承和模型表单,而无需分别在每个继承的模型或表单处理例程中重写约束检查.

验证方法的性能将与您实现的一样好.实际上,在某些情况下您可能不必访问数据库,因此性能可能比在数据库级别实施相同的限制更好.例如,如果您碰巧检查要保存的对象中的某些模型字段值组合(而不是其他已保存的对象),则不必访问数据库,而是在python对象级别快速进行检查.

  • 这也不意味着并发可能导致不一致,因为两个不同的线程通过模型验证然后写入数据库,彼此不知道吗?不是因为直接的"唯一"约束,因为那些被Django推送到数据库,但是任何其他类型的约束取决于其他行? (4认同)