所以我有一个Django模型,它存储了5天的数据,因为数据量太大,我们必须删除超过5天的所有数据。该模型当前具有Django自动创建的自动增加的id字段。这里的问题是,很快它就无法生成足够大的主键。
理想情况下,我有一个复合主键,但Django还不支持这个。所以我看着unique_together,并想知道是否有可能只使用它作为pesudo pk并删除自动递增id,因为它并没有真正用于应用程序中的任何东西。
另一种选择是这个模块:django-compositekey但是我不确定它的支持程度如何?
在任何一种情况下,我都需要组合4列来创建一个独特的记录:
class MassObservations(models.Model):
time = models.DateTimeField()
star = models.ForeignKey('Stars')
property = models.ForeignKey('Properties')
observatories = (('1', 'London'),
('2', 'China'),
('3', 'United States'))
station = models.CharField(max_length=2, choices=observatories)
mass = models.FloatField()
class Meta:
unique_together = ('time', 'star', 'property', 'station')
关于如何处理数据/ Django表的任何其他想法都是这样的?
而不是使用整数作为主键,您可以使用这样的UUID:
import uuid
from django.db import models
class MassObservations(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
... rest of your fields ...
即使您的记录数量,冲突也“不太可能”。
一般来说,没有主键是“坏”。为什么?试想一下如何删除单个记录。
或者,您可以创建自定义“bigint”主键,如下所述:
Django BigInteger auto-increment field as primary key?
(你很快就会用尽数字:D)
我不使用id作为主键。相反,我使用复合键,你可以像这样写:
class User(models.Model):
a = models.IntegerField(primary_key=True)
b = models.IntegerField(primary_key=True)
c = models.IntegerField(primary_key=True)
所以,当你使用User.objects.get(...)
时,你不会看到这个错误:
OperationalError:(1054,“字段列表'中的未知列'user.id'”)