【问题标题】:Django inconsistent queryset resultsDjango 不一致的查询集结果
【发布时间】:2021-01-27 13:41:29
【问题描述】:

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

models.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.query 的结果是SELECT 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 会帮助解决这个问题?

【问题讨论】:

    标签: python django django-queryset psql


    【解决方案1】:

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

    $./manage.py flush
    

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多