当它不是Django模型时,是否可以在数据库中使用表?

时间:2016-04-08 13:58:16

标签: python django

是否可以从应用数据库中的表中获取不是应用中的模型的查询集?

如果我的表格不是名为" cartable"的模型,从概念上讲,我想这样做:

myqueryset = cartable.objects.all()

有相对简单的方法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

如果要访问数据库中不受应用程序管理的现有表,您仍然可以为其创建一个类,并告诉django忽略它以进行迁移。

只需创建一个模型并添加您需要访问的字段,然后添加一个元类来告诉django不要管它。

class MyModel(model.Model):

   class Meta:
      managed = False

您可以在https://docs.djangoproject.com/en/1.9/ref/models/options/#managed

了解相关信息

答案 1 :(得分:0)

为此,您需要使用使用原始SQL的方法创建一个类(而不是模型)。您应该在此处查看有关如何执行此操作的更多详细信息:https://docs.djangoproject.com/en/1.9/topics/db/sql/#executing-custom-sql-directly

请注意,您必须在之后手动创建具有正确属性的对象。

如果您想在没有模型的情况下使用Django ORM,我认为这是不可能的。但是,您可以在单独的应用程序中创建与数据库匹配的模型,并且永远不会为其创建迁移,以确保您不会意外修改数据库。

答案 2 :(得分:0)

简短的回答是,"不是真的"。 Django QuerySet处理模型实例,因此QuerySet API中的所有内容都与模型相关联。一切都希望返回模型实例,使用模型字段等。

也就是说,您应该能够为现有表创建模型。您需要将db_table添加到Meta,因此Django知道表所在的位置。如果您有一些索引,则需要确保Django对索引的想法与数据库中的索引相同。 indexed =字段中的True和Meta中的unique_together应该对此有很大的帮助。