如何根据定义的Jsonfield判断一个元素是否在列表中?

问题描述:

我用peewee相关与exsits表:如何根据定义的Jsonfield判断一个元素是否在列表中?

import peewee 
from playhouse.postgres_ext import * 
class Rules(peewee.Model): 
    channels = JSONField(null=True) 
    remark = peewee.CharField(max_length=500, null=True) 
    class Meta: 
     database = db 
     db_table = 'biz_rule' 
     schema = 'opr' 

例如:在我的表中存在的列频道的记录:

["A012102","C012102","D012102","E012102"] 

我想判断“A012102”是否在名单,如何编写代码?

如果您使用的是PostgreSQL 9.4+,则可以使用jsonb数据类型,使用相应的postgres_ext.BinaryJSONField peewee字段类型。它有contains_any()contains_all()方法,它们对应于PostgreSQL ?|?&运算符(see the PostgreSQL JSON docs)。所以我认为它会是这样的:

from playhouse.postgres_ext import BinaryJSONField 

class Rules(peewee.Model): 
    channels = BinaryJSONField(null=True) 
    ... 

query = Rules.select().where(Rules.channels.contains_all('A012102'))