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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/ef750756-4a8e-4043-bd5e-873a188612ec%40googlegroups.com.