Я новичок в SQLalchemy. Мне нужно вычислить кратное несколько price
в одной из таблиц. Это мои таблицы:
class Order(DeclarativeBase):
__tablename__ = 'order'
id = Field(Integer, primary_key=True)
products = relationship("OrderProduct", back_populates="order", lazy='dynamic')
и
class OrderProduct(DeclarativeBase):
__tablename__ = 'order_products'
id = Field(Integer, primary_key=True)
order_id = Column(Integer, ForeignKey('order.id'), nullable=False)
order = relationship("Order", back_populates="products", protected=True)
product_id = Column(Integer, ForeignKey('product.id'), nullable=False)
product = relationship("Product", back_populates="order_product")
quantity = Field(Integer, nullable=False)
и
class Product(DeclarativeBase):
__tablename__ = 'product'
id = Field(Integer, primary_key=True)
price = Field(Integer)
order_product = relationship("OrderProduct", back_populates="product", protected=True)
Я хочу умножить price
в этой ситуации OrderProduct.quantity * Product.price
и products
в Order
таблица представляет собой массив Products
Я пишу SQL
запрос, как это, и он работает:
SELECT SUM(price*quantity) FROM product
JOIN order_products ON product.id = order_products.product_id
JOIN order ON order_products.order_id = order.id;
Я попытался сделать это в ORM, как это, но это заняло у меня Product
, и я могу вычислить только price
без кратного в quantity
:
result = 0
for product in Product.query\
.join(OrderProduct).filter(Product.id == OrderProduct.product_id)\
.join(Order).filter(OrderProduct.order_id == self.id):
result = product.price + result
return result
Я делаю это как @hybrid_property
, и он хорошо работает.
Я использую фреймворк с именем restfulpy
. он имеет ORM для sqlalchemy, session
в этом фреймворке равен scoped_session
, но он дает мне SQL-запрос в режиме отладки вместо того, чтобы выполнять запрос следующим образом:
sum_price = {Query}SELECT sum(product.price * order_products.quantity) AS sum_1
FROM product JOIN order_products ON product.id = order_products.product_id JOIN "order" ON "order".id = order_products.order_id
WHERE product.id = order_products.product_id AND order_products.order_id = :order_id_1
Ну, может кто-нибудь помочь мне решить эту проблему?
с уважением