我在一个拥有多个数据库的django项目中工作,我正在寻找一种方法来使用导入或方法获取当前数据库别名。
我一直在搜索文档,但我找不到任何有用的信息。
答案 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'