繁体   English   中英

使用包含,数组转换和子查询的SQLAlchemy查询

[英]SQLAlchemy query using contains, array casting and subqueries

将以下查询转换为SQLAlchemy查询的任何帮助将不胜感激:

select * from app where (select app_ids from user where user_id=12345) @> array[app_id];
  • app中的app_id是一个int列
  • 用户中的app_ids是int []列
  • 用户中的user_id是一个int列

我已经尝试了许多公式,但是都由于一种或另一种原因而失败,这是一个失败的示例,因为ARRAY对象没有contained_by方法:

subq = self.session.query(objects.User.app_ids).filter(objects.User.user_id == 12345).subquery('subq')

self.session.query(objects.App).filter(postgresql.ARRAY(objects.App.app_id).contained_by(subq.c.app_ids)).all()

我也尝试了以下等效的原始查询,但没有任何运气。 也许这些会更容易翻译吗?

select * from app where array[app_id] <@ (select app_ids from user where user_id=12345);


select * from app where app_id=ANY((select app_ids from user where user_id=12345)::integer[]);

所有这些原始查询都可以在postgres中正常工作。

谢谢。

找到了any()公式,结果证明它是最适合任何大量条目的方法:

subq = session.query(objects.User.app_ids).filter(objects.User.user_id == 12345)

results = session.query(objects.App).filter(
   objects.App.id == sqlalchemy.func.any(sqlalchemy.cast(subq.as_scalar(), postgressql.ARRAY(sqlalchemy.Integer))
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM