将非常感谢将以下查询转换为SQLAlchemy查询的任何帮助:
select * from app where (select app_ids from user where user_id=12345) @> array[app_id];
我尝试了很多配方,但都因为某种原因而失败,这是一个失败的例子,因为ARRAY对象不具备contains_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中都能正常运行。
感谢。
答案 0 :(得分:2)
计算出任何()公式,这对于任何大量的条目都是最好的:
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))
)