Bu örnekte, örnek MySQL classicmodels database kullanıyorum.SQLAlchemy'de iki sorguya nasıl katılır?
Yani iki sorgu var:
products = session.query(Products)
orderdetails = session.query(OrderDetails)
en Bundan sonra veritabanına bir daha sorgular yapamaz ve sadece bu noktadan itibaren bu iki sorgu katılabilir varsayalım.
ben bir dış yapmak istiyorum böyle bir şey yapmak mümkün onlara katılmak: Bu konuda bir outerjoin yapmak her
for orderdetail, product in query:
print product.productName, product.productCode, orderdetails.quantityOrdered
Ancak, sadece sol katılmak için görünebilir. Böyle
for q in query:
# Only gives orderdetails columns
print q
Ve yapıyor şey:
for orderdetails, product in query:
print orderdetails, product
bana bir hata verir: TypeError: 'OrderDetails' object is not iterable
böyle
query = orderdetails.outerjoin(Products)
Kod sütunları ORDERDETAILS sadece verir.
Neyi yanlış yapıyorum? Sadece ürünler tablosundan sütunlar istiyorum.
DÜZENLEME:
Ben @ univerio cevabı benim çözüm sayesinde bulduk. Asıl amacım, mevcut iki sorgunun birleşimini yapmak ve daha sonra bunlara bir SUM
ve COUNT
işlemi yapmaktı.
SQLAlchemy temel olarak bir sorgu nesnesini SQL deyimine dönüştürür. with_entities
işlevi, SELECT
ifadesini, ona aktardığınız her şeye değiştirir. Bu açma ve okuma içerir benim güncellenmiş bir çözümdür katılmak:
for productCode, numOrders, quantityOrdered in orderdetails.with_entities(
OrderDetails.productCode,
func.count(OrderDetails.productCode),
func.sum(OrderDetails.quantityOrdered)).group_by(OrderDetails.productCode):
print productCode, numOrders, quantityOrdered
Evet, session.query aracılığıyla bunu yapmak için bir yol var biliyorum ama sahip olduğum iki oturum sorgusuyla bunu yapmanın bir yolu var mı? – joshualan
@joshualan Bunu neden yapmanız gerektiğini anladığımdan emin değilim. Sorgu boyunca yinelenene kadar hiçbir SQL yürütmez. Ya da iki alt soruyu birleştirmek mi istediniz? Ya da var olan bir sorguyu yeniden kullanmak istersiniz, çünkü üzerinde filtreler var mı? – univerio
Evet, sadece mevcut sorguları yeniden kullanmak istedim. Bir yolu var gibi görünmüyor. – joshualan