You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django查询:如何筛选值为Decimal('NaN')的DailyPrice对象?

如何查询Django中close字段为Decimal('NaN')的DailyPrice对象?

先看你的模型定义:

class DailyPrice(models.Model):
    date = models.DateField()
    close = models.DecimalField(
        max_digits=15,
        decimal_places=2,
    )

你已经确认存在close字段为Decimal('NaN')的记录,但用DailyPrice.objects.filter(close__isnull=True)查不到结果——这很正常,因为Decimal('NaN')并不是数据库层面的NULL值,它是一个合法的Decimal类型值,只是语义上表示非数字,所以isnull=True根本匹配不到这类记录。

要筛选出close为Decimal('NaN')的记录,你可以利用NaN的数学特性:它不等于任何值,包括它自己,通过原生SQL条件来实现查询:

DailyPrice.objects.extra(where=['close != close'])

这个方法的原理是:数据库中只有NaN值会满足close != close的条件,普通数值和NULL都不会触发这个判断(NULL和任何值比较都是NULL,不会返回true),所以能精准筛选出你要的记录。

如果你使用的是PostgreSQL数据库,还可以用更贴合数据库特性的方式,直接匹配NaN的字面量:

from django.db.models import F, Value
from django.db.models.functions import Cast

DailyPrice.objects.filter(close=Cast(Value('NaN'), output_field=models.DecimalField()))

不过这种方式的兼容性不如第一种通用,extra()的方法在大多数关系型数据库(MySQL、PostgreSQL、SQLite等)里都能正常工作。

执行上面的查询后,你应该就能拿到所有close为Decimal('NaN')的DailyPrice对象了。

内容的提问来源于stack exchange,提问作者user3595632

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:56:35