Python 使用django意外行为搜索Json字段
嗨,伙计们,我在django postgres json搜索中看到了一种我无法理解的行为。 我使用django 1.11和django orm以及psycopg2驱动程序 内容如下: model字段中的json如下所示Python 使用django意外行为搜索Json字段,python,sql,django,postgresql,orm,Python,Sql,Django,Postgresql,Orm,嗨,伙计们,我在django postgres json搜索中看到了一种我无法理解的行为。 我使用django 1.11和django orm以及psycopg2驱动程序 内容如下: model字段中的json如下所示 {"2018": [1, 2, 3]} 如果我使用此查询: models.mymodel.objects.filter(jsonfield__2018__contains=1) Out[97]: <QuerySet []> 新查询: models.mymodel.
{"2018": [1, 2, 3]}
如果我使用此查询:
models.mymodel.objects.filter(jsonfield__2018__contains=1)
Out[97]: <QuerySet []>
新查询:
models.mymodel.objects.filter(jsonfield__0__2018__contains=1)
Out[98]: <QuerySet []>
models.mymodel.objects.filter(jsonfield__0__2018_1__contains=1)
Out[100]: <QuerySet [<MyModel: MyModel object>]>
新查询:
models.mymodel.objects.filter(jsonfield__0__2018__contains=1)
Out[98]: <QuerySet []>
models.mymodel.objects.filter(jsonfield__0__2018_1__contains=1)
Out[100]: <QuerySet [<MyModel: MyModel object>]>
models.mymodel.objects.filter(jsonfield\uuuuu0\uuuuu2018\u1\uuuuuuu contains=1)
出[100]:
这一个回应了,我不能把我的头围绕着它。有人知道这是为什么吗?Django不允许在模型中只使用数字字段名。我认为这个限制是由一些数据库列名限制引起的(例如,在MySQL中,标识符可能以数字开头,但除非引用,否则可能不完全由数字组成)
Django对JSON键有类似字段的行为,所以我认为问题可能是由于相同的原因。您可以尝试使用字母数字JSON键并进行测试 你能试试这个吗。。{“abc”:[1,2,3]}。。models.mymodel.objects.filter(jsonfield\uuu abc\uu contains=1)。。如果这有效,那么我们就知道问题所在。Django不允许数字作为模型字段名。伙计,谢谢你分配了好的捕获,有效的是