首页 > 解决方案 > Django 不一致的查询集结果

问题描述

在对数据集进行了一些批量添加后,我注意到一些不一致之处。之前,来自 Metadata 的 ID 总是返回查询集。现在,元数据中一半的 ID 返回一个查询集,而新批次总是返回空查询集。

模型.py:


class Metadata(models.Model):
  strain_id = models.CharField(max_length=255, blank=True) 

psql:(注意在 ID 2290 和 1002 周围添加了单引号,在 Django .query 语句中不存在)


## Old batch:
pg=# SELECT DISTINCT ON (U0."strain_id") U0."id" FROM "chat_metadata" U0 WHERE U0."strain_id" IN ('2290') ORDER BY U0."strain_id" ASC;
  id  
------
 1457
(1 row)

## New batch (working here???):
pg=# SELECT DISTINCT ON (U0."strain_id") U0."id" FROM "chat_metadata" U0 WHERE U0."strain_id" IN ('1002') ORDER BY U0."strain_id" ASC;
  id  
------
 1474
(1 row)

然而,结果.queryset.querySELECT DISTINCT ON (U0."strain_id") U0."id" FROM "chat_metadata" U0 WHERE U0."strain_id" IN (2290) ORDER BY U0."strain_id" ASC。当在 Django 中运行并返回一个有效的查询集时,这会神奇地起作用。但是,当从 psql 运行时,会发生以下情况:


pg=# SELECT DISTINCT ON (U0."strain_id") U0."id" FROM "chat_metadata" U0 WHERE U0."strain_id" IN (2290) ORDER BY U0."strain_id" ASC;
ERROR:  operator does not exist: character varying = integer
LINE 1: ..."id" FROM "chat_metadata" U0 WHERE U0."strain_id" IN (2290) ...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

这有点令人沮丧,因为旧批次(2290)在 Django 中显示,而新批次(1002)返回一个空查询集。也许 reset_db 会帮助解决这个问题?

标签: pythondjangodjango-querysetpsql

解决方案


清除数据库似乎可以解决问题:

$./manage.py flush

推荐阅读