2 回答
TA贡献1812条经验 获得超5个赞
找到了解决方案。也许它对某人有用。将 UUID 转换为 UUID 数组:
(e.idevent || array[]::uuid[])
你可以这样做literal_column:
literal_column('ARRAY[]::uuid[]').op('||')(Event.idevent)
现在整个 `WHERE' 块可以这样描述:
.filter(uuid_event_arr.notin_(filtered_event)).all()
但是,事实上,在WHERE没有 'array_agg ()' 函数的情况下重写子查询更容易。这反过来又使使用炼金术构建查询变得更加容易:
filtered_event = session.query(Event.idevent)\
.select_from(cte_union_view)\
.join(Valuefield, cte_union_view.c.id_value == Valuefield.idvalfield)\
.join(Event, Event.idevent == Valuefield.idevent)\
.filter(and_(Valuefield.idtable == 41, cte_union_view.c.v_text == '222'))
views_value = session.query(cte_union_view)\
.join(Valuefield, cte_union_view.c.id_value == Valuefield.idvalfield)\
.join(Event, Event.idevent == Valuefield.idevent)\
.filter(Event.idevent.in_(filtered_event)).all()
添加回答
举报