Ahh... I missed the relation.any() part of your example - with it the code should behave exactly as I need. I think. I need to give it a try.
Thanks! On Oct 30, 9:53 am, "Sergey V." <sergey.volob...@gmail.com> wrote: > > 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 > > Cool, it almost solves my problem! > > However, it doesn't check if a User have a given Address, it just > checks if an Address exists in general. It would be easy to add > another filter() by User.id, but that wouldn't work for many-to-many > relations. > > My hope was to somehow get a Query object from a relation property > with everything already set up (imagining that a relation somewhere > stores the query it itself uses) and then just attach another filter() > to it. > > Imaginary code: > > relation = getattr(obj.__class__, property_name) > q = relation.get_query(...) > result = q.filter(id = address_id).first() > > This approach works in Django's ORM, so it definitely should be doable > in SA :) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---