我是SQLAlchemy的新手,正在进行以下查询:
ratings = meta.Session.query(Thing) \
.filter_by(owner = user.id)\
.filter_by(objType = 'rating')\
.filter(Thing.data.any(with_characteristic('ratingType', 'binary')))\
# .filter(Thing.data.any(with_characteristic('fooCode', '.*')))\
# .filter(Thing.data.any(with_characteristic_like('fooCode', '.*')))\
.order_by('-lastUpdated').all()
按原样,这给了user
拥有的所有东西,其objType为rating,ratingType为binary。我在两个注释行中尝试做的是过滤到二进制等级,其数据对象包含fooCode
属性。我不关心fooCode是什么,我只是想把我的结果过滤到有一个的东西 - 因此我试图在那里使用正则表达式 - 这是无效的(我得到空的结果集)。
我该怎么做?
答案 0 :(得分:0)
假设您正在使用example中显示的垂直映射,只需添加另一个辅助方法并使用它:
class Thing(...):
# ...
@classmethod
def with_characteristic(self, key, value):
return self.facts.any(key=key, value=value)
@classmethod
def has_characteristic(self, key):
return self.facts.any(key=key)
并使用它:
ratings = (meta.Session.query(Thing)
.filter_by(owner = user.id)
.filter_by(objType = 'rating')
.filter(Thing.data.any(with_characteristic('ratingType', 'binary')))
.filter(Thing.data.any(has_characteristic('fooCode')))
.order_by('-lastUpdated').all()
)