【发布时间】: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