【问题标题】:Django ORM update with unique=True使用 unique=True 更新 Django ORM
【发布时间】:2015-04-02 20:31:50
【问题描述】:

读入一个 XML 文件,并使用新信息更新数据库。在验证 XML 数据之后,在更新/保存特定记录之前,将新数据与数据库记录进行比较是合理的。

希望使用面向对象的方法。完成这项任务的最佳方法是什么?

下面给出了模型的草图。请注意,唯一字段设置为 true,这会限制创建 Client 对象的实例。

class BaseModel(models.Model):

class Client(BaseModel):

employee_id = models.CharField(max_length = 30, primary_key = True)
name = models.CharField(max_length=30, db_index=True, null=False, blank=False)

class Alias(BaseModel):

client = models.ForeignKey(Client, related_name='aliases')
ssn = models.CharField(max_length=255, db_index=True, unique=True)
driver_lic = models.CharField(max_length=255, db_index=True, unique=True)

【问题讨论】:

  • 您希望进行什么比较?只是这两个条目(SSN 和驾驶执照)确实是独一无二的还是其他什么?
  • XML 文件中的 SSN 可能已经过验证,但它与数据库中的 SSN 不同。在更新条目之前比较两个数字时,可能会将其写入日志文件,标记可能的数据错误。
  • 您能否列出哪些字段用于将 XML 条目与数据库条目(如果有)进行匹配,哪些字段可从 XML 条目在数据库中更新?
  • db.aliases.scheme = 'SSN' 和 db.aliases.value = '000-00-0000' xml.aliases.scheme = 'SSN' 和 xml.aliases.value = '111- 11-1111'
  • 这不是问题,因为 '111-11-1111' 是唯一的。另一方面,如果 xml 数据具有“000-00-0000”,我将无法创建 xml Client 对象,因为 unique=True。

标签: django validation orm sql-update unique-constraint


【解决方案1】:

这是解决问题的一种方法:

将 XML 书保存到单独的数据库中。该方法从创建第二个数据库的 settings.py 文件开始。对多数据库管理页面的支持有限。

还有其他方法吗?

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2021-05-02
    相关资源
    最近更新 更多