its a little unfortunate that Invoice.item.distinct() is recursion overflowing like that, but in general if you want to select distinct Item objects you'd be saying query(Item).distinct().
not sure I understand what "invoices that have distinct items" means. I understand "invoices that have items". If Invoice inv1 and inv2 both reference item im1, are you saying you don't want either of them ? Only invoice inv3, which references im2, and nobody else references im2 ? thats a fairly tricky query, probably using EXISTS: from sqlalchemy.orm import aliased from sqlalchemy import and_ inv = aliased(Invoice) query(Invoice).filter(~Invoice.any(and_(Invoice.item_id==inv.item_id, Invoice.id!=inv.id))) On Jan 20, 2011, at 6:33 AM, NiL wrote: > hi list, > > I have the following (elixir) definitions > > class Invoice(Entity): > user_name = Field(Unicode(255)) > item = ManyToOne(Item) > > class Item(Entity): > item_id = Field(Integer, primary_key=True) > service_id = Field(Unicode(255), primary_key=True) > item_class = Field(Unicode(255), primary_key=True) > > I wish to select invoices that have distinct items > > (Pdb) Session.query(Invoice.item.distinct()) > *** RuntimeError: maximum recursion depth exceeded while calling a > Python object > > this works > (Pdb) Session.query(Invoice.item_item_id.distinct()) > <sqlalchemy.orm.query.Query object at 0x988e7ec> > but doesn't lead to the expected result > > here is the invoice's table description > > CREATE TABLE invoice ( > id INTEGER NOT NULL, > user_name VARCHAR(255), > item_item_id INTEGER, > item_service_id VARCHAR(255), > item_item_class VARCHAR(255), > PRIMARY KEY (id), > CONSTRAINT invoice_item_item_id_item_service_id_item_item_class_fk > FOREIGN KEY(item_item_id, item_service_id, item_item_class) REFERENCES > item (item_id, service_id, item_class) > ) > > > How can I achieve my query ? > > regards > NIL > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.