如何使用Django查询多个数据库类型?

时间:2012-08-06 15:44:42

标签: python database django

我正在尝试构建一个基于django的网页(我知道python并希望开发一些基于Web的应用程序)。此页面的目标是显示来自我只有读取权限的几个不同数据库的数据。基本上,它是几个关键事物的仪表板类型视图。

我已经构建了一个Sqlite数据库来保存应用程序的Django设置。我怎么从这里出发?我想查询Oracle数据库和MySQL数据库吗?

我可以在适当的视图中使用类似的东西单独查询它们:

def test(request):
    from django.db import load_backend
    myBackend = load_backend('django.db.backends.oracle') # or 'mysql', 'sqlite3', 'oracle'
    myConnection = myBackend.DatabaseWrapper({
        'HOST': 'myhost',
        'NAME': 'mysid',
        'OPTIONS': {},
        'PASSWORD': "mypass",
        'PORT': "1521",
        'USER': "myuser", 
        'TIME_ZONE': "America/Chicago"})

    # Now we can do all the standard raw sql stuff with myConnection.
    myCursor = myConnection.cursor()
    myCursor.execute("SELECT COUNT(1) FROM schema.table;")
    return HttpResponse("%s." % myCursor.fetchone())

在模板中,我可以显示此计数。但是,这似乎是不正确的,基于我如何查询Sqlite数据库。

我想使用数据模型。当我只是阅读数据时,这是否适合使用?该帐户没有对oracle / mysql表的写访问权。

有没有办法为现有表格自动生成这些模型?其中一些表在列数方面相当大,如果可能的话,我更愿意自动创建以防止我出错。

1 个答案:

答案 0 :(得分:3)

对于多数据库支持,请参阅Django documentation。长和短,您将每个数据库的连接信息添加到DATABASES设置,然后设置路由器以确定每个数据库处理的应用程序/模型。

要从现有数据库表生成模型,您可以使用inspectdb management command。但是,Django没有使用此命令明确列出对Oracle数据库的支持,因此您可能在那里自己。