for some tips on isolating where the speed issue is, follow the steps at: 
http://docs.sqlalchemy.org/en/latest/faq.html#how-can-i-profile-a-sqlalchemy-powered-application

for too many joins, you also want to look into EXPLAIN PLAN.



On Sep 11, 2014, at 12:57 PM, tatütata Okay <rogersher...@googlemail.com> wrote:

> Hey,
> I got some shop tables like:
> customerorders, itemsbought, products whole query with three joins takes 
> nothing on command line sql. When I trying to achieve same thing with ORM and 
> my relationship it takes 1 second, joining all three 3 tables 2 seconds?
> 
> May I come first up with my table and mapper definitions:
> 
> class Products(Base):
>     __tablename__ = 'products'
>     id = Column(Integer, primary_key=True)
>     productname = Column(Unicode(255))
>     productname_en =Column(Unicode(255), default = u'nice product')
>     path = Column(Unicode(300))
>     pic = Column(Unicode(300), unique=True)
>     bigpic = Column(Unicode(300), unique=True)
>     sold = Column(Boolean)
>     price = Column(Integer)    
>     locked = Column(Boolean)
>     sort = Column(Integer)
>     catid = Column(Integer)
>     sizeid = Column(Integer, ForeignKey('productsizes.sizeid'))
>     productsizes = relationship("ProductSizes", backref="products", 
> lazy='joined') 
>     itemsbought = relationship("Itemsbought", backref="products")
> 
>     def __init__(self, productname, path, pic, bigpic,  sold,  price, sizeid, 
> locked, sort, catid):
>         self.productname = productname
>         self.path = path
>         self.pic = pic
>         self.bigpic = bigpic
>         self.sold = sold
>         self.price = price
>         self.sizeid = sizeid
>         self.locked = locked     
>         self.sort = sort
>         self.catid = catid
> 
> class Customerorder(Base):
>     __tablename__ = 'customerorders'
>     id = Column(Integer, primary_key=True)
>     ip = Column(Unicode(40))  
>     comment = Column(Unicode(1000)) 
>     plz = Column(Unicode(30))    
>     name = Column(Unicode(100))    
>     street = Column(Unicode(200))  
>     ort = Column(Unicode(100)) 
>     date = Column(DateTime, default = func.now())
>     money_received = Column(Boolean)
>     shipped = Column(Boolean)
>     
>     def __init__(self, comment, ip, street, plz, ort, name, money_received):
>         self.ip = ip
>         self.customerid = customerid
>         self.comment = comment
>         self.street = street
>         self.plz = plz
>         self.ort = ort
>         self.name = name
>         self.money_received = money_received
>         self.shipped = shipped
> 
> class Itemsbought(Base):
>     __tablename__ = 'itemsbought'
>     id = Column(Integer, primary_key=True)
>     orderid = Column(Integer, ForeignKey('customerorders.id'))
>     order = relationship('Customerorder', backref=backref("itemsbought"))
>     productid = Column(Integer, default = 0)
> 
>     def __init__(self, productid, orderid):
>         self.productid = productid
>         self.orderid = orderid
> 
> 
> I try to query only Customerorder and Itemsbought without having those 
> relations to products:
>     customerorders = sqlsession.query(Customerorder)\
>     .join(Itemsbought.order)\
>     .all() 
> or with joinedload, outerjoins all the same thing. log shows me always 
> sqlalchemy makes left outer joins.
> Trying to use this data in loop ends up in 1700 queries:
> 
> for order in customerorders:
>   print order.name, 
>     for item in order.itemsbought:
>       print item.productid
> 
> I managed to get all this correct data with sizes and products in 2,5 s with 
> joinedload but this is a way too long for 5 k entries in itemsbought and 1680 
> orders.
> 
> Can someone point to what I am doin wrong? And whats the best way to get all 
> orders in an clearly arranged way with products, price, sizes etc.
> 
> Cheers
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to