python - Json 字段搜索与 django 意外行为

标签 python sql django postgresql orm

大家好,我在 django postgres json 搜索中看到了一种我不理解的行为。 我正在使用 django 1.11 和带有 psycopg2 驱动程序的 django orm。

过程如下:

模型字段中的 json 如下所示。

{"2018": [1, 2, 3]}

如果我使用这个查询:

models.mymodel.objects.filter(jsonfield__2018__contains=1)
Out[97]: <QuerySet []>

如您所见,我得到了一个空查询。

然后我只是为了测试目的而尝试这样做。 新的 Json:

[ {"2018": [1, 2, 3]}]

新查询:

models.mymodel.objects.filter(jsonfield__0__2018__contains=1)
Out[98]: <QuerySet []>

还是没有反应。

然后我终于尝试了这个。 新的 Json:

[ {"2018_1": [1, 2, 3]}]

新查询:

models.mymodel.objects.filter(jsonfield__0__2018_1__contains=1)
Out[100]: <QuerySet [<MyModel: MyModel object>]>

这个人回应了,我无法理解它。有谁知道这是为什么?

最佳答案

Django 不允许在模型中使用纯数字字段名称。我认为此限制来自某些数据库列名限制(例如,在 MySQL 中,标识符可能以数字开头,但除非引用可能不完全由数字组成)。

而且 Django 对 JSON 键有类似字段的行为,所以我认为这个问题可能是由于同样的原因造成的。您可以尝试使用字母数字 JSON key 并进行测试。

关于python - Json 字段搜索与 django 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48593821/

相关文章:

sql - 用于显示的口语年龄计算

mysql - 如何使用 Django/Apache/mod_wsgi/MySQL 在 EC2 上最大化性能?

Django,没有数据契约(Contract)的 SOA 风格网站的单元测试

python - 多行正则表达式与迭代器兼容吗?

python - 通过python计算文本文件中的单词

mysql - 即将到来的生日年错误 (SQL)

mysql - 考勤 : Get time_in and time_out of flexible schedule Employees

python - 尝试提取 URL 时使用 Urllibopener 时引发 HTTP 错误

python - re.sub 在标点符号和以标点符号开头或结尾的单词之间放置空格

python - 从 django webapp 中的模块导入函数时出错