后端

时间:2017-11-14 09:37:06

标签: django django-queryset

我需要检查远程数据库中的表并更新数据库中的另一个表。模型具有相同的字段,但使用差异方法检查将返回错误:

  

qs1从一个postgresql db获取数据

     

qs2从一个mysql db获取数据

qs1 = (Local.objects
            .values_list('ref')
)
qs2 = (Remote.objects
            .filter()
            .values_list('ref'))

>>> qs1.difference(qs1, qs2)
  

DatabaseError:此数据库后端不支持交集。

2 个答案:

答案 0 :(得分:0)

我不确定你认为你的代码是什么。

qs1在默认的Databasengine中查找模型 Local 。并且qs2也会在您的默认Databasengine中查找模型 Remote

您可能想要做的是在 settings.py 中定义第二个数据库 为实例“远程”命名,然后按如下方式修改q2:

qs2 = (Remote.objects.using("remote").filter().values_list('ref'))

这告诉django它应该联系你的远程数据库而不是你的本地数据库。

Lemme知道这有用与否。

答案 1 :(得分:0)

check = Qs1.objects.all()
prg=[]
[prg.append(x.ref) for x in check]
difference = (Qs2.objects
        .exclude(ref__in=prg)
        .values()
)

也许它不优雅,但它只是有效。