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

时间:2016-11-11 06:35:30

标签: peewee

我使用与exsits表相关的peewee:

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”是否在列表中,如何编写代码?

1 个答案:

答案 0 :(得分:0)

如果您使用的是PostgreSQL 9.4+,则可以使用相应的jsonb peewee字段类型使用postgres_ext.BinaryJSONField数据类型。它具有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'))