我有一个理解问题,因为我正在考虑如何在Django或数据库中管理我的数据。
这是一张每天约有2000行和8列的表格。我想将过去10年的所有日常数据存储到数据库中,并每天添加新数据。为每天创建数据库表是个好主意。在Django中,为每个模型创建了一个表,但是发明者并不打算在Django中创建5000个模型。
这是我使用原始SQL创建表的唯一方法吗?或者有没有我在文档中没有发现的方法?
答案 0 :(得分:5)
您提出的问题的简短回答是"是的,最快的方法是使用原始SQL,"或者是动态创建新模型并运行makemigrations的变体。
也就是说,在没有关于您的问题或任务的更多细节的情况下,我必须立即质疑为什么要动态创建表。对于初学者来说,这将失去Django提供的与架构的良好ORM连接,而无需更多技巧(自动生成的模型,每日makemigrations,迁移期间潜在的错位数据,您的专业代码等) 。一些想法:
如果此问题的前提是您遇到速度问题,那么我建议您需要仔细考虑您的数据模型normalization,并考虑您需要添加索引的位置。例如,如果您的默认数据模型不能提供正确的索引,那么使用@ lodb' s(快速手指!)建议并手动告诉Django的ORM创建索引:
class Meta:
indexes = [
models.Index(fields=['day',]),
]
答案 1 :(得分:4)
老实说,每天一张桌子不是Django的最佳选择,因为它会使整个框架更难用:
如果速度是你每天保留一张桌子的原因,我只会使用一个表,在日期字段上有一个数据库索引。它可能会慢一点,但它会让你的生活更轻松。
您需要将其添加到模型定义中:
class Meta:
indexes = [
models.Index(fields=['day',]),
]
本手册更详细地解释了它:https://docs.djangoproject.com/en/1.11/ref/models/indexes/