【问题标题】:PostgreSQL delete record from two joined tables based on conditionsPostgreSQL 根据条件从两个连接表中删除记录
【发布时间】:2022-01-19 14:30:22
【问题描述】:

在我的 django 项目中,连接了一个 PostgreSQL 数据库,我创建了这两个模型:

class Results(models.Model):
    device = models.ForeignKey(Device, null=True, on_delete=models.SET_NULL)
    proj_code = models.CharField(max_length=400)
    res_key = models.SlugField(max_length=80, verbose_name="Message unique key", primary_key=True, unique=True)
    read_date = models.DateTimeField(verbose_name="Datetime of vals readings")
    unit = models.ForeignKey(ModbusDevice, null=True, on_delete=models.SET_NULL)


class VarsResults(models.Model):
    id = models.AutoField(primary_key=True)
    key_res = models.ForeignKey(Results, related_name="keyres", on_delete=models.CASCADE)
    var_id = models.ForeignKey(ModbusVariable, null=True, on_delete=models.SET_NULL)
    var_val = models.CharField(max_length=400, blank=True)
    var_val_conv = models.CharField(max_length=100, blank=True, null=True)
    base_byte_order = models.CharField(max_length=15)
    var_hash = models.CharField(max_length=400)
    has_error = models.BooleanField(default=False)

所以 VarsResults 对结果有一个外键,我会从基于结果的条件开始删除两个表中的一些记录,例如

DELETE RECORDS FROM RESULTS IF RESULTS read_date < VALUE

我也会自动删除 VarsResults 表中的所有相关记录。 django ORM中是否有方法或直接使用SQL来实现?

提前非常感谢

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    由于您的ForeignKey 中有on_delete=models.CASCADE,因此每当您删除Results 对象时,所有相关的VarsResults 也将被删除。您只需要删除Results 就可以通过一个查询来完成:

    Results.objects.filter(read_date__lt=value).delete()
    

    【讨论】:

      猜你喜欢
      • 2023-01-23
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2011-07-15
      • 2016-07-21
      • 2016-11-18
      相关资源
      最近更新 更多