这是一个脱离Django的ORM并使用原始SQL的好例子吗?(除非可以动态生成模型)

这是一个脱离Django的ORM并使用原始SQL的好例子吗?(除非可以动态生成模型),django,django-models,Django,Django Models,因此,我一直在使用Django的ORM进行所有操作;然而,我发现这个应用程序中有一部分我认为没有意义。也就是说,除非可以动态生成模型并将其放入models.py中,这样我就不必每年更新它 该公司此应用程序用于聚合来自不同行业的数据。它们之间没有重叠。此外,每年从每个行业收集的数据可能有所不同。因此,表被分解为: Industry_A_15 Industry_A_16 Industry_A_17 Industry_B_15 Industry_B_16 Industry_B_17 除非我将ORM添

因此,我一直在使用Django的ORM进行所有操作;然而,我发现这个应用程序中有一部分我认为没有意义。也就是说,除非可以动态生成模型并将其放入models.py中,这样我就不必每年更新它

该公司此应用程序用于聚合来自不同行业的数据。它们之间没有重叠。此外,每年从每个行业收集的数据可能有所不同。因此,表被分解为:

Industry_A_15
Industry_A_16
Industry_A_17
Industry_B_15
Industry_B_16
Industry_B_17
除非我将ORM添加到models.py中,否则我看不出ORM是如何工作的。每年,每个models.py都有100多列。我能想到的最有效的方法是执行类似于./manage.py inspectdb>models.py的操作,但这往往不适用于具有约束的表

那么,这是一个用原始SQL编写的好例子吗

听起来我想完全避开模型层,真的:


这样我就可以动态地参考表格,以后就不必再碰它了。此外,查询将是非常基本的SELECT,因此我认为它应该可以在主要数据库之间移植。这些表是通过CSV上传创建的,因此没有任何手动操作来创建它们。

模型可以动态生成。比如说,做什么

my_fields = {
    'field_one':models.CharField(max_length=22),
    'field_two':models.CharField(max_length=22),
}
MyModel  = type('MyModel', (models.Model,), my_fields)
而不是

class MyModel(models.Model):
    field_one = models.CharField(max_length=22)
    field_two = models.CharField(max_length=22)
详情请参阅


即使使用灵活的策略,在进行迁移时仍必须确认模型中的更改。您可以每年创建一个应用程序,动态生成其模型。

如果模型的字段要更改,我想您可能会面临类似的问题,但是您不必更新/创建新的django模型,而必须更新/创建新的SQL表。难道不是这样吗?表格的创建是通过从FE实用程序上传CSV来完成的。虽然字段将发生更改,但正在执行的查询是SELECT*FROM table_name,其中x='foo'和y='bar'是从FE传递的值,是所有这些表中的常量字段。如果使用模型,我必须映射出模型的每个字段名。当然,我可以使用ORM动态地引用模型,但是映射字段似乎是不必要的。请解释否决票以及如何改进该问题。否则就显得势利和没有建设性了。在所有这些表中都是常量的字段->所以x和y不会随着时间而改变?因为那样的话,你甚至不需要创建新的模型。。。django中的映射相当。。。毕竟很简单。您可以向SQL中添加任意数量的新列。只要映射的列存在于表中,Django就不会关心是否有更多的列…而且,如果您的db恰好是Postgres,您可以添加Is not。。。很好,不应该被滥用,但是如果你不特别关心新的变化,也许它是一个放置这些变化的好地方?有点像一个垃圾或者一个是的,是的,是的。。。不管怎样…:-D此解决方案有效并直接解决问题->同意。。。这是一种很好的从CSV导入的头创建模型的方法,如问题Dunno中详述的OP。。。如果你能举个例子说明如何做到这一点,也许会有所帮助?我也不明白投反对票的原因,though@BorrajaX. 感谢您的支持:不知道为什么会有人被否决,总是让人感到不安。