【问题标题】:Where to check for constraints, in django or database?在哪里检查约束,在 django 或数据库中?
【发布时间】:2013-07-04 19:55:44
【问题描述】:

在考虑性能时,

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

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

【问题讨论】:

  • 该数据库中的约束用于优化查询性能等。因此,您可以在任何地方验证约束,但我建议保持数据库中的约束启用并验证以供优化器使用。

标签: python sql django postgresql


【解决方案1】:

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

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

【讨论】:

  • 这是否也意味着并发可能导致不一致,因为两个不同的线程通过模型验证,然后写入数据库,彼此不知道?不适用于直接的unique 约束,因为这些约束是由 Django 推送到数据库的,而是取决于其他行的任何其他类型的约束?
  • 是的@spectras,这是真的。截至目前,正在实施 db 级检查约束,但尚未实现:github.com/django/django/pull/7615
  • @fjsj 很有趣。我过去常常通过自定义的手写迁移来添加它们。得到 Django orm 的支持会很棒。
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 2010-09-15
  • 2017-06-02
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多