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.

Reply via email to