2017-04-25 102 views
0

我有一个MySQL数据库,其中包含一个名为things的JSON字段的表。该JSON看起来像这样Django MySQL查询Json字段

东西= {“值1”:“菲尔”,“值2”:“吉尔”}

我有对象的集合,我已经从数据库中通过

my_things = Name_table.objects.values 

现在,我想通过其中一个JSON字段过滤my_things集合。我已经试过这

my_things = my_things.filter(things__contains = { '值': '菲尔'})

它返回一个空的集合。我也试着

my_things = my_things.filter(东西= { '值': '菲尔'})

my_things = my_things.filter(things__exact = {'value':'phil'})

我使用Django 1.10和MySQL 5.7 想法?

回答

1

这取决于您如何在字段中存储JSON。如果您使用django-jsonfield,那么您的things将是不带空格的字符串,字符串在引号内:'{"value1":"phil","value2":"jill"}'

然后,通过docs

my_things = my_things.filter(things__contains='"value1":"phil"') 

应该回到你的过滤查询集,因为

>>> tmp_str = '{"value1":"phil","value2":"jill"}' 
>>> '"value1":"phil"' in tmp_str 
True 
+0

我想你的建议,它仍然会返回一个空的集合。数据不是使用djang-jsonfield存储的,而是使用python的内置json库从非web python应用程序存储的。 –

+0

真的很奇怪的是my_things包含了几个项目,之后我应用了过滤器和之后的0个项目。 –

+0

忽略我以前的评论 - 你的建议奏效。 –