Python SQLAlchemy:不使用“发件人”字段连接到子查询

Python SQLAlchemy:不使用“发件人”字段连接到子查询,python,sql,orm,sqlalchemy,flask-sqlalchemy,Python,Sql,Orm,Sqlalchemy,Flask Sqlalchemy,我有一个名为product_model的表及其相应的ProductModel SQLAlchemy模型 我希望将product_model表连接到一个select子查询,该查询只需卸载两个PostgreSQL数组product model ID和quantity,然后将product_model表连接到该数据。数据是从一个简单的python目录中获取的。我在这个用例中使用PostgreSQL,但是如果有更好的想法,我将非常乐意使用另一种方法 在SQL中,如下所示:此语句计算购物车中所有产品的总质

我有一个名为product_model的表及其相应的ProductModel SQLAlchemy模型

我希望将product_model表连接到一个select子查询,该查询只需卸载两个PostgreSQL数组product model ID和quantity,然后将product_model表连接到该数据。数据是从一个简单的python目录中获取的。我在这个用例中使用PostgreSQL,但是如果有更好的想法,我将非常乐意使用另一种方法

在SQL中,如下所示:此语句计算购物车中所有产品的总质量:

SELECT SUM(p.mass * c.quantity) FROM product_model AS p
INNER JOIN (
  SELECT UNNEST(ARRAY[1]) AS model_id, UNNEST(ARRAY[2]) AS quantity
) AS c ON p.id = c.model_id
GROUP BY p.id;

我想用SQLAlchemy为这个SQL语句建模。这可能吗?我不知道如何连接到不从表中选择的子查询。或者我需要搜索替代方案吗?

不确定您的解决方案有多好,但下面介绍如何使用SQLAlchemy编写SQL查询:

来自sqlalchemy.dialogs.postgresql导入数组 首先编写子查询。数组函数用于Pg数组文字。 subq=db.session.query db.func.unnestarray[1]。标签'model_id', db.func.unnestarray[2]。标签“数量” .子查询 现在,当您拥有子查询时,可以将其当作表对象来使用。 q=db.session.querydb.func.sumProductModel.mass*子q.c.数量\ joinsubq,ProductModel.id==subq.c.model\u id\ group_byProductModel.id