Django QuerySet差分方法不起作用

2024-03-28 16:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到两个查询集之间的差异,对我来说,这个差异的答案是一个查询集是很重要的。差分法是自然求异法。但是,当我尝试这样做时,我得到了以下错误:

NotSupportedError: difference is not supported on this database backend.

我要做的是:

In [4]: type(small_qs)
Out[4]: django.db.models.query.QuerySet

In [5]: type(bigger_qs)
Out[5]: django.db.models.query.QuerySet

In [6]: bigger_qs.difference(small_qs)

重要提示:两个查询集来自同一型号。

其他可用信息:

  • 使用docker(数据库和django)
  • 数据库后端是MariaDB(MySQL)
  • Django版本是2.0.6
  • MariaDB版本为10.3.8

这里是完整的输出:

^{pr2}$

如果需要更多的数据,请告诉我。在


Tags: djangoin数据库dbmodelstype差异out
2条回答

根据this ticket的说法,django并不正式支持MariaDB。大部分功能显然都存在,但在确定版本或区分MySQL和MariaDB方面似乎有一些困难。我猜你看到的错误与此有关。在

也就是说,取决于你想做什么,difference实际上可能不是你问题的“自然解决方案”。如果(我怀疑)两个查询集实际上在同一个模型上,那么最简单的方法就是使用^{}。大致如下:

bigger_qs.exclude(id__in=smaller_qs)

这不会产生相同的SQL(difference使用EXCEPT,而{}使用{}),它应该产生相同的结果集(可能以不同的顺序)。在

此代码可能有助于:

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

相关问题 更多 >