簡體   English   中英

SQLAlchemy:加入子查詢,不帶字段

[英]SQLAlchemy: Join to subquery with no from field

我有一個名為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM