python - 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.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 会帮助解决这个问题?
解决方案
清除数据库似乎可以解决问题:
$./manage.py flush
推荐阅读
- microsoft-graph-toolkit - 如何为人员组件指定人员查询?
- button - 如何关闭一个阶段并打开另一个阶段?
- ios - 如何根据点击的单元格更改视图控制器的数据
- laravel - 用于检查用户可用性的数据透视表
- python - 子模块中包含的文件不会复制到 virtualenv 中
- c# - 使用 ReactiveUI wpf 无法将视图模型中的枚举值列表绑定到视图中的组合框
- google-cloud-platform - Google Cloud Platform 使用 InstanceGroupManager 启动多个实例
- flutter - ListView.builder 以错误的方式缓存
- c++ - OpenCV convertTo 从 bmp 图像到 double/CV_64FC1 没有给出与 Matlab 中相同的值
- groovy - Groovy:是否有任何机制可以将 groovy.json.internal.LazyMap 强制转换为 groovy.util.slurpersupport.NodeChild