2017-04-25 226 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

忽略我以前的評論 - 你的建議奏效。 –