我可以用一个数据库,查看作为一种模式在Django?
-
21-08-2019 - |
题
我喜欢用看我在我的数据库作为来源为我django图。
这是可能的,而没有使用定义sql?
******13/02/09 更新***********
像许多问题的答案表明,你可以只是让你自己看中的数据库,然后用它在API通过定义,它在models.py.
一些警告,但:
- manage.py syncdb将不再工作了
- 视需要同样的事情在开始其名称的所有其他模式(表格)e。g如果你的应用被称为"事情",那么你认需要将所谓的thing_$视图
解决方案
由于Django1.1,可以使用 选项。管理 为。
旧版本,你可以轻松地定义模型类图和使用就像您的其他意见。我只是测试其使用源码为基础的应用程序,它似乎正常工作。只要确定添加的一个主要关键领域如果你看的"primary key"列不是名为'id',并指定图的名称元的选择,如果你看是不是所谓的'app_classname'.
唯一的问题是,"syncdb"的命令,将提出一个例外,因为它将试图创建表。你可以防止,通过定义的'视图模型'在一个单独的蟒蛇的文件,不同于models.py.这种方式,决不会看到他们时,检查models.py 要确定的模式创建的应用程序,并为此将不试图创建表。
其他提示
只更新那些人会遇到这个问题(从谷歌或任何其他人)...
目前它具有一个简单的"适当方法" 定义模型没有管理的数据库表:
选项。管理
默
True
, ,这意味Django将创建适当的数据库中的表syncdb
和删除他们的一部分reset
管理命令。是的,Django 管理 该数据库表的'生命周期。如果
False
, ,没有数据库的创建表或删除作业将为执行这一模式。这是有用的,如果该模型代表了现有表或数据库查看,已经创建了一些其他装置。这是的 只 差异时managed
是False
.所有其他方面的模式处理是完全一样正常。
我只是实现一种模式的使用便与postgres9.4和django1.8.
我创造了定义移徙类是这样的:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('myapp', '0002_previousdependency'),
]
sql = """
create VIEW myapp_myview as
select your view here
"""
operations = [
migrations.RunSQL("drop view if exists myapp_myview;"),
migrations.RunSQL(sql)
]
我写的模型,因为我通常会。它的工作原理我的目的。
注意到-当我跑makemigrations一个新的移徙文件的模型,该模型手动删除。
完全公开的-我认为只读因为我使用一个看来从jsonb数据类型,并没有书面上的更新,而不是规则。
我们已经做到了这一相当广泛,在我们的应用程序与MySQL工作围绕单一数据库的限制Django。我们的应用程序,有几个数据库生活在一个单一的MySQL的实例。我们可以实现跨数据库的模式加入这种方式只要我们已经创建了风景对于每个表中的"目前"数据库。
尽插入/更新到美景,我们的使用情况,基本上是一个"select*from[数据库。表];".换句话说,我们没有做任何复杂的加入或过滤所以插入/更新触发save()工作得很好。如果您使用的情况下,需要这样复杂的加入或广泛的过滤,我怀疑你不会有任何问题只读方案,但可能会碰到插入/更新问题。我认为有一些潜在的制约因素MySQL,防止从更新到的意见交叉表格、具有复杂的过滤器,等等。
无论如何,你的里程可能会有所不同,如果您使用的是一个关系数据库比其他MySQL,但决不会真正关心如果坐在一个物理的表格或图。这将是RDBMS,确定它是否实际上能作为你的期望。如先前的评论者指出,只有可能被扔syncdb出窗外,虽然我们成功地解决它与后syncdb的信号,即下降的物理表创建Django和运行我们的"创建景..."命令。然而,后syncdb信号是有点神秘的方式,它会触发,因此买者自负有作为。
编辑:当然通过"后syncdb信号"我的意思是"后syncdb监听"
从 Django正式文件, 你可以打电话给的图像这样:
#import library
from django.db import connection
#Create the cursor
cursor = connection.cursor()
#Write the SQL code
sql_string = 'SELECT * FROM myview'
#Execute the SQL
cursor.execute(sql_string)
result = cursor.fetchall()
希望它有助于;-)