Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django意外行为搜索Json字段_Python_Sql_Django_Postgresql_Orm - Fatal编程技术网

Python 使用django意外行为搜索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.

嗨,伙计们,我在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.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不允许数字作为模型字段名。伙计,谢谢你分配了好的捕获,有效的是