如何根据定义的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'))