Sql server 如何在Django中连接来自两个不同数据库的两个表?
在我的一个项目中,我遇到了将Django中不同数据库中的两个表连接在一起的需求,但还不能找到最佳解决方案。问题是我有两个数据库,其中的表相互关联,我想在两个不同数据库的表之间建立连接SQL查询在MS SQL Server中运行良好,但在Django中如何做到这一点是主要问题。我想在Django内部运行RawSQL查询,并将其传递给ORM。对于单个数据库来说,这是可以的,但是对于两个数据库来说,它不起作用 例如,我有两个数据库,比如带有表CashAccount的DB1和带有表teamAccount的DB2Sql server 如何在Django中连接来自两个不同数据库的两个表?,sql-server,django,django-models,django-orm,Sql Server,Django,Django Models,Django Orm,在我的一个项目中,我遇到了将Django中不同数据库中的两个表连接在一起的需求,但还不能找到最佳解决方案。问题是我有两个数据库,其中的表相互关联,我想在两个不同数据库的表之间建立连接SQL查询在MS SQL Server中运行良好,但在Django中如何做到这一点是主要问题。我想在Django内部运行RawSQL查询,并将其传递给ORM。对于单个数据库来说,这是可以的,但是对于两个数据库来说,它不起作用 例如,我有两个数据库,比如带有表CashAccount的DB1和带有表teamAccount
SQL Query:
SELECT (t1.unique_name) as unique_name,
(t1.AccountBalanceAmount) AS AccountBalanceAmount,
(t2.TeamName) AS TeamName,
(t2.ProjectDesc) AS ProjectDesc,
FROM (
SELECT CONCAT(ID,'_',ProjectName) AS unique_name,
AccountBalanceAmount
FROM DB1.CashAccount
) t1
INNER JOIN (
SELECT CONCAT(ID,'_',ProjectName) AS unique_name,
TeamName
ProjectDesc
FROM DB2.TeamAccount
) t2 ON t1.unique_name = t2.unique_name
如何使用Django ORM执行此查询或使用raw()执行原始SQL查询?我认为上述答案是一个很好的答案,但有一个更复杂的解决方案
- Django希望您通过创建模型,然后运行migrate命令来创建/更新所选数据库中的表来创建数据库。如果您这样做,所有内容都将在同一个DB中,您将不会遇到此问题
- 我想再组织一下我的数据库,这样我就可以手动创建它们,一个团队成员创建了一个自定义路由器来指示要使用哪个数据库
classdbrouter(object):def db_for_read(self,model,**提示):“指定哪种模型使用哪种数据库写入”“,如果模型位于[Industry,Verticals]:返回“database-a”
更新设置文件以使用自定义路由器
DATABASE\u ROUTERS=['your\u app.db\u ROUTERS.DBRouter']
然后您可以使用如下代码:
banana=TableB.objects.get(pk=1)
queryset=TableA.objects.using('db-a').all()
queryset=queryset.using('db-b').filter(foreign\u key\u col\u a=banana)
我认为上述答案是一个很好的答案,但还有一个更复杂的解决方案
- Django希望您通过创建模型,然后运行migrate命令来创建/更新所选数据库中的表来创建数据库。如果您这样做,所有内容都将在同一个DB中,您将不会遇到此问题
- 我想再组织一下我的数据库,这样我就可以手动创建它们,一个团队成员创建了一个自定义路由器来指示要使用哪个数据库
classdbrouter(object):def db_for_read(self,model,**提示):“指定哪种模型使用哪种数据库写入”“,如果模型位于[Industry,Verticals]:返回“database-a”
更新设置文件以使用自定义路由器
DATABASE\u ROUTERS=['your\u app.db\u ROUTERS.DBRouter']
然后您可以使用如下代码:
banana=TableB.objects.get(pk=1)
queryset=TableA.objects.using('db-a').all()
queryset=queryset.using('db-b').filter(foreign\u key\u col\u a=banana)
?这回答了你的问题吗?