django - 在 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 上有多个数据库的“没有这样的表”
但我正在使用一个视图,它必须是不受管理的......
解决方案
我认为,如果您想使用远程数据库,则应该在 settings.py 文件下的数据库设置中定义该数据库设置。而不是通过使用该数据库名称,您可以访问该数据库表
EmpView.objects.using('db_name').filter()
你还应该在模型中定义你的字段。
推荐阅读
- python - Pandas: Nesting Dataframes
- angular - 单元测试导入方法 jasmine
- typescript - 如何在 Vue 组件上声明 Vuex 绑定的类型?
- testing - 使用 jmeter 进行移动应用程序测试,配置代理设置后互联网连接不起作用
- powershell - 使用 Get-AzureADUser 在 PowerShell 中删除具有特定域的完整电子邮件
- opencv - 不支持标签数据类型 = 19
- vue.js - 在 nuxt.js 中包含引导程序
- android - 使用 ArrayList 创建 Intent
- batch-file - 用批处理文件打开2个程序,我自己退出另一个程序后如何杀死一个程序?
- javascript - 避免使用 Javascript 重新加载页面的链接