Hi

I want to use the FilteredQuery pattern [1], but I am facing a problem 
related to SQLAlchemy not calling "before_compile" as often as I'd expect 
it.

Here's a simple example:

@event.listens_for(Query, "before_compile", retval=True)
def before_compile(query):
    print("XXXXX before_compiled called XXXXX")
    return query

class User(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True)
    name = Column(String)
    addresses = relationship("Address", back_populates="user")

class Address(Base):
    __tablename__ = "address"
    id = Column(Integer, primary_key=True)
    email = Column(String)
    user_id = Column(Integer, ForeignKey("user.id"))
    user = relationship("User", back_populates="addresses")

and then I do the following twice:

for u in Session().query(User):
    for a in u.addresses:
        print(u.name, a.email)

The first time before_compile is called twice, one call for the SELECT FROM 
"user" query, and another call for the SELECT FROM "address" query. But the 
second time before_compile is called only once. It's called for the SELECT FROM 
"user" query, but not for the SELECT FROM "addresses" query. Is it expected?

I am using SQLAlchemy 1.3.10.

The full test case is here: 
https://gist.github.com/elemoine/3fa86da54fc1195e314fa18999d05a68



[1] https://github.com/sqlalchemy/sqlalchemy/wiki/FilteredQuery

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/ef750756-4a8e-4043-bd5e-873a188612ec%40googlegroups.com.

Reply via email to