Thank you Mike!

In fact, that's not my actual model - it is a little more complex than that (specially the @setter), that's why my curiosity about using hybrids and the possibility to query against an object.


Best regards,
Richard.

On 04/16/2013 09:34 PM, Michael Bayer wrote:

On Apr 16, 2013, at 9:30 AM, Richard Gerd Kuesters <rich...@humantech.com.br <mailto:rich...@humantech.com.br>> wrote:

Hello all!

Ok, maybe people asks this a lot, but I wonder if it's possible to perform a query using an object as a filter - and I searched for it, didn't found anything close to my idea.

Simple dumb example code:


*class User(Base):**
**
**     user_id = Column(Integer, Sequence(...), primary_key=True)**
**     username = Column(Unicode)**
**
**
**class Subscription(Base):**
**
** subscription_id = Column(Integer, Sequence(...), primary_key=True)**
**    name = Column(unicode)**
** owner_id = Column(Integer, ForeignKey('user.user_id'), nullable=False)**
**
**    @hybrid_property**
**    def owner(self):**
        if not object_session(self):
            return None
** return object_session(self).query(User).filter(self.owner_id == User.user_id)**.first()
**
**    @owner.setter**
**    def owner(self, owner):**
** self.owner_id = owner.user_id if isinstance(owner, User) else owner**
**        if object_session(self):**
**            object_session(self).commit()**
**
**    # @owner.expression**  # ???**
**
**
**# ok, so far *almost* good**
*

OK, all of that complexity with hybrid_property is not needed at all here. Just say, "owner = relationship("User")", and you're done. SQLAlchemy manages one-to-many, many-to-one, and many-to-many automatically with relationship().

*
**
**# but, i would like to do _this_ instead**
**
**print session.query(Subscription).filter(Subscription.owner == new_user).all()*


I've tried it in so many ways that I feel dizzy. The only way I think would be using @owner.expression to "return User", but that didn't the trick, it only appends "WHERE false" to the query, hehehe.

yeah just use relationship(), and you'd be using the first operator as described right here in the ORM tutorial (which is a must-read): http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html#common-relationship-operators


--
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.



--
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to