Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-有没有办法获取当前数据库别名?_Python_Django_Django Models_Django Orm - Fatal编程技术网

Python Django-有没有办法获取当前数据库别名?

Python Django-有没有办法获取当前数据库别名?,python,django,django-models,django-orm,Python,Django,Django Models,Django Orm,我在一个django项目中使用多个数据库,我正在寻找一种使用导入或方法获取当前数据库别名的方法 我一直在文档中搜索,但没有找到任何有用的信息。如果您有查询集,可以使用以下命令检索数据库名称: 如果您有模型实例(您评估了QuerySet),您可以查询(请注意,这没有文档记录,因此将来可能会更改,并且不建议在应用程序中使用@Weier所说的): Django中没有“current”db别名这样的东西 查看db路由器的文档以了解原因: (尽管@fasouto使用QuerySet的私有API在特定模型

我在一个django项目中使用多个数据库,我正在寻找一种使用导入或方法获取当前数据库别名的方法


我一直在文档中搜索,但没有找到任何有用的信息。

如果您有查询集,可以使用以下命令检索数据库名称:

如果您有模型实例(您评估了QuerySet),您可以查询(请注意,这没有文档记录,因此将来可能会更改,并且不建议在应用程序中使用@Weier所说的):


Django中没有“current”db别名这样的东西

查看db路由器的文档以了解原因:

(尽管@fasouto使用
QuerySet
的私有API在特定模型上的读取操作上下文中正确显示了“当前”别名)

试试这个:

from django.db import router

alias_for_read = router.db_for_read(MyModelClass)
# optionally:
alias_for_read = router.db_for_read(MyModelClass, instance=my_model_instance)

# similarly:
alias_for_write = router.db_for_write(MyModelClass)
alias_for_write = router.db_for_write(MyModelClass, instance=my_model_instance)

关于
实例
参数。。。db路由器类的规范规定,它们应该接受
**提示
kwargs。它们还声明当前唯一支持的提示是
实例
。但是,除非您有一个使用此提示的自定义路由器类,否则您将不需要提供当前实例。

最好不要提供指向代码实现的链接作为参考。Django文档中未提及的任何内容都应被视为私有API,不得在Django应用程序中使用。没错,QuerySet.db是在ModelState no.编辑时记录的
>>> f = Item.objects.all()[4]
>>> f._state.db
'default'
from django.db import router

alias_for_read = router.db_for_read(MyModelClass)
# optionally:
alias_for_read = router.db_for_read(MyModelClass, instance=my_model_instance)

# similarly:
alias_for_write = router.db_for_write(MyModelClass)
alias_for_write = router.db_for_write(MyModelClass, instance=my_model_instance)