【问题标题】:In Django, is on_delete implemented in Python, or using DB triggers, for PostgreSQL databases?在 Django 中,on_delete 是用 Python 实现的,还是使用 DB 触发器实现的,用于 PostgreSQL 数据库?
【发布时间】:2020-02-07 23:33:47
【问题描述】:

我有一个应用程序,它在一个大型 Django 应用程序和一组微服务器(用 Go 编写)之间共享一个数据库。如果一条记录被微服务器删除,使得不同表中的记录具有引用它的外键,并且如果我在相应的ForeignKey 字段中指定了on_delete=models.CASCADE,以下哪项是正确的?

  1. 依赖记录将被 PostgreSQL 删除,或者
  2. 应该由微服务器“手动”删除相关记录(这是我目前所做的),

或者有没有办法指定我希望如何处理on_delete

这里有一个完整的例子:

from django.contrib.gis.db import models

class Parent(models.Model):
    name = models.CharField(max_length=128)

class Child(models.Model):
    name = models.CharField(max_length=128)
    parent = models.ForeignKey(
        Parent,
        null=False,
        on_delete=models.CASCADE)

在 Go 中:

_, err = db.Exec(`DELETE FROM module_parent WHERE ID = $1`, parentID)

或者我必须这样做:

_, err = db.EXEC(`DELETE FROM module_child WHERE parent_id = $1`, parentID)

...

_ err = db.EXEC(`DELETE FROM module_parent WHERE id = $1`, parentID

【问题讨论】:

    标签: django postgresql foreign-keys


    【解决方案1】:

    第二个是真的,根据Django docs for ForeignKey

    on_delete 不会在数据库中创建 SQL 约束。支持数据库级级联选项may be implemented later

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2010-09-27
      • 2018-01-31
      相关资源
      最近更新 更多