首页 > 解决方案 > 在 Django 中引用另一个数据库中的视图

问题描述

我有一个本地表,它需要从远程数据库中引用一个视图。
两个模型都在同一个应用程序中定义。

现在,我想使用 django-import-export 从 excel 导入数据或从表单保存数据。
它一直在读取错误的数据库。

我的本地数据库是 SQLite,远程数据库是 MSSQL。

用于访问视图的模型:

class EmpView(models.Model):

    class Meta:
        db_table = 'View_Emp'
        managed = False
        indexes = [
            models.Index(fields=['code',]),
        ]

    ...

当模型是视图时,我将路由器设置为让 Django 读取远程数据库,否则从默认视图读取:

def db_for_read(self, model, **hints):
   if model.__name__ == 'EmpView':
      return 'emp'
   return 'default'

和错误:

Traceback (most recent call last):
File "E:\Projects\Envs\.as\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "E:\Projects\Envs\.as\lib\site-packages\django\db\backends\sqlite3\base.py", line 298, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: main.View_Emp

你可以说它读取本地数据库,但它应该读取远程数据库。
我哪里错了?

我发现了这个问题,但没有答案: Django 1.11.1 上有多个数据库的“没有这样的表”

但我正在使用一个视图,它必须是不受管理的......

标签: djangocross-database

解决方案


我认为,如果您想使用远程数据库,则应该在 settings.py 文件下的数据库设置中定义该数据库设置。而不是通过使用该数据库名称,您可以访问该数据库表

EmpView.objects.using('db_name').filter()

你还应该在模型中定义你的字段。


推荐阅读