数据库
首页 > 数据库> > python-SQLAlchemy:联接子查询,没有from字段

python-SQLAlchemy:联接子查询,没有from字段

作者:互联网

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

我希望将product_model表连接到select子查询,该查询仅取消嵌套两个PostgreSQL数组(产品模型ID和数量),然后将product_model表连接到此数据.数据来自一个简单的购物车(python dict).我在这种情况下使用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查询的方法:

from sqlalchemy.dialects.postgresql import array

# First write the subquery.  array() function is used for Pg ARRAY literals.
subq = db.session.query(
    db.func.unnest(array([1])).label('model_id'),
    db.func.unnest(array([2])).label('quantity')
).subquery()

# Now when you have the subquery, you can use it as if it were a Table object.
q = db.session.query(db.func.sum(ProductModel.mass * subq.c.quantity)).\
    join(subq, ProductModel.id == subq.c.model_id).\
    group_by(ProductModel.id)

标签:orm,sqlalchemy,flask-sqlalchemy,python,sql
来源: https://codeday.me/bug/20191030/1965434.html