在SQLAlchemy中按null值过滤postgres JSON列

rep*_*cus 8 python postgresql sqlalchemy

所以我有一个这样的模型:

class myModel(Base):

    id = Column(Integer, primary_key=True)
    border = Column(JSONB)
Run Code Online (Sandbox Code Playgroud)

如何查询没有边框的行?我试过了:

filter(myModel.border != None) #nope
filter(myModel.border != 'null') #nope
from sqlalchemy import null
filter(myModel.border != null()) #nope
Run Code Online (Sandbox Code Playgroud)

该值显然存储postgres"JSON编码的空值".它None在实例化时肯定会被序列化回python ,但我不知道如何查询它.看起来你可以none_as_null在列上设置,即:

Column(JSONB(none_as_null=True))
Run Code Online (Sandbox Code Playgroud)

这取代了null用SQL null 编码的JSON ,但这对所有列都很奇怪.我在这里错过了什么?

编辑:应该提到这是sqlalchemy的v0.9.8

小智 3

PostgreSQL 有函数jsonb_typeof,它返回 json 值的字符串类型。因此您可以将空值过滤为jsonb_typeof(myModel.border) != 'null'. 您可以在PostgreSQL 文档中找到详细信息