Hello Mike,

Thank you very much for your response. 
I ended up with that, but i wanna ask you about this solution.

class A(Base):
    id: int = Column('a_id', Integer, primary_key=True, autoincrement=True)

#descr
class B(Base):
    id: int = Column('b_id', Integer, primary_key=True, autoincrement=True)
    a_id: int = Column('a_id', Integer, ForeignKey('a.a_id'))
    c_relationship = relationship("C", secondary='b_rel_c', lazy='joined', 
uselist=False)

#descr_cat
class C(Base):
    id: int = Column('c_id', Integer, primary_key=True, autoincrement=True)
    c_attr1: int = Column(Integer, nullable=False)
    c_global_attr_1: int = Column(Integer, nullable=False)

class B_rel_C(Base):
    b_id: int = Column('a_id', Integer, ForeignKey('a.a_id'))
    c_id: int = Column('a_id', Integer, ForeignKey('c.c_id'))
    some_kw: int = Column(Integer)

class CustomSelectClass(Base):
    __table__ = select(B, C.c_global_attr_1, C.c_attr1).join(B_rel_C, 
B_rel_C.b_id == B.id). \
        join(C, C.id == B_rel_C.c_id).where(
        B.a_id == A.id,
        C.c_global_attr_1 == bindparam('c_global_attr_1')). \
        limit(100).subquery().lateral()

A.b_filtered_rel = relationship(CustomSelectClass, lazy='joined')

class X(Base):
    id: int = Column('x_id', Integer, primary_key=True, autoincrement=True)
    a_id: int = Column('a_id', Integer, ForeignKey('a.a_id'))

I use this aproach also with another schema like this:  X -> A -> A_REL_B 
<- B -> C 

s = select(A).where(A.id == 1)
s = s.options(joinedload(A.b_filtered_rel))
or
s = select(X).options(joinedload(A).options(joinedload(B))) 
result = session.execute(s, dict(c_global_attr_1=1))

s = s.options(*selectionload*(A.b_filtered_rel))
or
s = select(X).options(*selectionload*(A).options(joinedload(B))) 
or
s = select(X).options(joinedload(A).options(*selectionload*(B))) 
result = session.execute(s, dict(c_global_attr_1=1))

What do you think about ability to pass some arguments to query emitted 
with selectinload

poniedziaƂek, 30 sierpnia 2021 o 17:50:49 UTC+2 Mike Bayer napisaƂ(a):

> yes, you would use bindparam("some_name") in conjunction with the "and_()" 
> feature, like  options(selectinload(MyClass.foo.and_(MyClass.name == 
> bindparam("some_name"))))
>
>
>
> On Mon, Aug 30, 2021, at 10:55 AM, Tomas Pavlovsky wrote:
>
> Hello, 
>
> is it possible in sqlalchemy arguments from db.execute(query, args) to be 
> passed to query emitted by selectinload?
>
> Thanks,
> Tomas
>
>
> -- 
> 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+...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/7cbbfb10-1c4f-4369-a30d-e83cee262d16n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/7cbbfb10-1c4f-4369-a30d-e83cee262d16n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
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/9ee6cacf-14e6-4e3a-9a93-f01850b9c91fn%40googlegroups.com.

Reply via email to