困在集成多个Django数据库上

2024-09-29 17:16:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,但似乎无法找到应对这一挑战的方法。 场景: 我有一个新的Django项目,我想用它作为API,我有我的默认数据库设置,当我试图在我的管理面板中查看表时,它可以完美地工作(唯一的表是用户的表)

所以我有另一个数据库,我想集成到这个项目中。它已经被填充了,我不会将数据写入其中,只是从中读取数据

我已经能够在settings.py中将数据库添加到我的数据库列表中,我还运行了inspectdb并生成了我的模型我已经完成了迁移,我可以从shell命令查看模型对象

挑战

因此,我在admin.py文件中注册了模型,当我登录时,我可以在管理面板中找到生成的两个表,但当我尝试单击它查看时,它会给我一个错误,即该表不存在。我可以推断问题是,当我试图在管理面板中打开这两个生成的表时,Django会在默认数据库而不是旧数据库中搜索这些表

我尝试过的解决方案

我实际上试过使用routers.py,但我想我无法获得正确的语法,因为我只使用一个应用程序,但使用多个数据库。老实说,这让我发疯了

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'thelwk_rest',
        'USER': 'webmaster',
        'PASSWORD':'**************',
        'HOST':'10.01.01.01',
        'PORT':'3306',
    },
    'lwkdata': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'thelwk_data',
        'USER':'webmaster',
        'PASSWORD':'**************',
        'HOST':'10.01.01.01',
        'PORT':'3306',
    }
}

tinker = Trends.objects.using('lwkdata').get(id=72)
#gives me my desired results

我的admin.py设置

from django.contrib import admin
from profiles_api import models
from profiles_api import models2


admin.site.register(models.UserProfile)
admin.site.register(models2.ThelwkRestNtflx)
admin.site.register(models2.Trends)

尝试在管理面板中打开表格时出现的错误


ProgrammingError at /admin/profiles_api/trends/
(1146, "Table 'thelwk_rest.trends' doesn't exist")
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/profiles_api/trends/

Tags: djangofrompy模型importregisterapi数据库
1条回答
网友
1楼 · 发布于 2024-09-29 17:16:28

类似以下的数据库路由器将强制将应用程序的所有读写操作路由到其他数据库:

class ProfilesAPIRouter:
    
    APP_LABEL = 'profiles_api'  # I think this is the name of your app
    DB_ALIAS = 'lwkdata'

    def db_for_read(self, model, **hints):
        if model._meta.app_label == self.APP_LABEL:
            return self.DB_ALIAS
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == self.APP_LABEL:
            return self.DB_ALIAS
        return None

allow_relationallow_migrate也可以被重写,尽管由于您使用了inspectdb来创建模型,我假设它们没有被管理

相关问题 更多 >

    热门问题