我有一个JSONB列thal看起来像这样的url_map
:
[
{"id": "id_1", "url": "url_1"},
{"id": "id_2", "url": "url_2"},
{"id": "id_3", "url": "url_3"},
{"id": "id_4", "url": "url_4"},
]
注意,这是一个JSONB列,它是一个字典列表
当我尝试输入一个新的数据条目时,我有一组ID作为列表出现:
['id_1', 'id_2', 'id_3', 'id_4']
我需要对该表运行ORM会话查询,该查询将告诉我是否存在任何列url_map
的记录,这些列包含在传入列表中具有所有ID的字典
我找到了一个足够简单的直接SQL查询,可以为我做到这一点:
select id
from mapper
where ARRAY(SELECT json_array_elements(url_mp::json)->>'id')
= ARRAY['id_1', 'id_2', 'id_4', 'id_4'];
如果存在一行,则返回一行;如果不存在,则不返回任何行
我的噩梦就是把它转换成ORM代码
以下是我使用ORM得出的结论:
new_ids = ['id_1', 'id_2', 'id_4', 'id_4']
with session_() as session:
sub_query = session.query(
func.json_array_elements(mapper.url_map.op('->>')('id')).label('id')
).subquery()
result = session.query(mapper.id).filter(
sub_query.c.csku == new_ids
).all()
我希望它返回行的ID,但是result
返回一个空列表,尽管数据库中有有效的条目
我能接受的原始查询
str(query.statement.compile(dialect=postgresql.dialect()))
只是说
'SELECT mapper.id \nFROM mapper \nWHERE false'
我试着用数组打字,但运气不好。任何有关这方面的帮助将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐