Sergey V. wrote:
> Hi all,
>
> I must be missing something obvious here...
>
> Let's suppose I have the following class:
>
> class User(Base):
>     # ....
>     addresses = relation(Address, backref="user")
>
> and I have a number which may be an ID of an Address object. How do I
> check if the number is an ID of one of Addresses of a given User?
>
> I could do that just iterating over the addresses:
>
> for address in user.addresses:
>      if address.id == ID:
>         print "TADA!"
>
> ... but this doesn't seem like a good solution. There must be a way to
> make SQLAlchemy to return the value.
>
> (to make it a bit more interesting - the code needs to be generic,
> i.e. the function just gets some SA-mapped object and property name,
> so I can't just build a query manually like this -
>
> addr = session.query(Address).filter(id=address_id).filter(user_id =
> user.id).one()
>
> - because I don't know what the join fields are (and if possible I'd
> like this to work with many-to-many relations too)
> )
>
> Thanks!
>   
Some assumptions:
1. "SA-mapped object" means the user object in the example
2. "property name" means "addresses" in the example
3. The function shouldn't assume that you want an Address object
4. The ID attribute is known ahead of time (e.g. its always "id"). If
not, your function will need another parameter.
5. The function needs to work on many-to-many relationships in addition
to one-to-many.

Then this should work:
def get_related_by_id(obj, property_name, id):
    relation = getattr(obj.__class__, property_name) # in example:
User.addresses
    related_class = relation.property.argument # in example: Address
    return Session.query(related_class).filter(relation.any(id=id)).first()

example usage:
address_exists = get_related_by_id(user, "addresses", 1234) is not None

-Conor


--~--~---------~--~----~------------~-------~--~----~
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