Django - 有一种方法可以获取当前的数据库别名吗?

时间:2015-05-25 17:46:08

标签: python django django-models django-orm

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

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

2 个答案:

答案 0 :(得分:3)

Django中没有'当前'db别名。

查看db路由器的文档以了解原因:
https://docs.djangoproject.com/en/1.8/topics/db/multi-db/#database-routers

(尽管@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)

关于instance参数... db路由器类的规范说他们应该接受**hints kwargs。他们还声明目前仅支持的提示为instance。但除非你有一个使用这个提示的自定义路由器类,否则你不需要提供当前实例。

答案 1 :(得分:1)

如果您有QuerySet,则可以使用db property

检索数据库名称
>>> f = Item.objects.all()
>>> f.db
'default'

如果你有模型实例(你评估了QuerySet),你可以查询ModelState(注意这没有记录,所以它可能在将来改变,不建议在应用程序中用作@Weier说的):

>>> f = Item.objects.all()[4]
>>> f._state.db
'default'