Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Django中每天在数据库中创建新表_Sql_Django_Python 3.x_Django Models_Mariadb - Fatal编程技术网

Sql 如何在Django中每天在数据库中创建新表

Sql 如何在Django中每天在数据库中创建新表,sql,django,python-3.x,django-models,mariadb,Sql,Django,Python 3.x,Django Models,Mariadb,我有一个理解问题,因为我正在考虑如何管理Django或数据库中的数据 这是一个每天大约有2000行和8列的表。我想将过去10年的所有每日数据存储到数据库中,并每天添加新数据。为每天创建一个数据库表是个好主意。在Django中,将为每个模型创建一个表,但inventor不打算在Django中创建5000个模型 这是我使用原始SQL创建表的唯一方法吗?或者有没有我在文档中没有发现的方法?老实说,在Django中,每天一张表并不是最好的方式,因为它会使整个框架更难使用: 您需要每天创建一个新模型 您

我有一个理解问题,因为我正在考虑如何管理Django或数据库中的数据

这是一个每天大约有2000行和8列的表。我想将过去10年的所有每日数据存储到数据库中,并每天添加新数据。为每天创建一个数据库表是个好主意。在Django中,将为每个模型创建一个表,但inventor不打算在Django中创建5000个模型


这是我使用原始SQL创建表的唯一方法吗?或者有没有我在文档中没有发现的方法?

老实说,在Django中,每天一张表并不是最好的方式,因为它会使整个框架更难使用:

  • 您需要每天创建一个新模型
  • 您需要每天进行迁移和迁移
  • 或者您可以完全跳过使用ORM
如果速度是您每天保留一个表的原因,那么我只使用一个表,在day字段上有一个数据库索引。它可能会稍微慢一点,但它会让你的生活轻松很多

您需要将其添加到模型定义中:

class Meta:
    indexes = [
        models.Index(fields=['day',]),
    ]

手册对此进行了更详细的解释:

对您提出的问题的简短回答是“是的,最快的方法是使用原始SQL”,或者是动态创建新模型并运行makemigrations

也就是说,在没有关于您的问题或任务的更多细节的情况下,我必须立即询问您为什么要动态创建表。对于初学者来说,这将使您失去Django提供的与模式的ORM连接,而无需更多的技巧(自动生成的模型、每日makemigration、迁移过程中潜在的错位数据、您的专用代码等)。一些想法:

  • 对于几乎所有基于web的项目,即使是最小容量的项目,2000行也几乎不算什么。甚至每天。整整一年之后,只有73万行。假设正确的模式索引和访问模式,对于RDBMS来说,这仍然可以忽略不计
  • 如果你真的需要制定计划,考虑在年度或十年的水平上做。730K*10年仅为730万行,通常仍被认为是可忽略的(考虑到适当的标准化和索引) 如果这个问题的前提是您遇到了速度问题,那么我建议您需要认真考虑您的数据模型,并考虑您需要在哪里添加索引。例如,如果您的默认数据模型没有提供适当的索引,则使用@lodb(quickfingers!)建议并手动告诉Django的ORM创建索引:

    class Meta:
        indexes = [
            models.Index(fields=['day',]),
        ]
    

    谢谢你的解释。虽然每天的数据集有时比最初想象的要大,所以现在我在一个表中有大约1300万条记录,但这没关系。每天仅查询该表1-2次以进行计算和创建图形。它也只需要数据集的一小部分。速度不是很重要,所以在这种情况下,这是最好的解决方案。