it has to do with how SQLAlchemy determines the FROM list in a select() 
statement.

if you say select(table.c.id), it knows that "table" is the thing to select 
"from".

however, if you say select(select(...).correlate(...).scalar_subquery()), 
that's assuming it's a SELECT from a scalar subquery,  which normally does not 
imply a FROM clause.

In this case, that you are saying correlate(C), we could argue that *does* 
imply a FROM clause of some kind, but SQLAlchemy doesn't make that leap right 
now.  You might have said correlate(C, D) or correlate_except(Q) and then it's 
not as clear what the scalar subquery would be selected FROM.

going further, there *could* be some new kind of API where a scalar subquery 
could suggest a FROM clause that should be used when this subquery is selected 
FROM.  that would allow your column_property() to be built up such that it 
would be "self sufficient" when queried by itself.  but again we don't have 
that right now.

with all those options exhausted, for SQLAlchemy to be given 
select(select().scalar_subquery()), and then to produce "SELECT * FROM (SELECT 
....) FROM <some table>", that FROM part has to be added on explicitly, i.e. 
select(select().scalar_subuqery()).select_from(<some table>).



On Wed, Nov 10, 2021, at 2:35 PM, niuji...@gmail.com wrote:
> This works! Could you explain a little about this differences by using 
> select_from here? I think this is very important and useful, really want to 
> learn it right.
> 
> On Wednesday, November 10, 2021 at 5:55:44 AM UTC-8 Mike Bayer wrote:
>> __
>> try calling:
>> 
>> query(C.symbol_from_a).select_from(C)
>> 
>> 
>> 
>> On Wed, Nov 10, 2021, at 4:50 AM, niuji...@gmail.com wrote:
>>> class A(Base):
>>>     primary_id = Column(Integer, prirmary_key=True)
>>>     some_A_marker = Column(String)
>>> 
>>> class B(Base):
>>>     primary_id = Column(Integer, primary_key=True)
>>>     referencing_A_id = Column(Integer, ForeignKey(A.primary_id))
>>> 
>>> class C(Base):
>>>     primary_id = Column(Integer, primary_key=True)
>>>     basedOn_B_id = Column(Integer, ForeignKey(B.primary_id))
>>>     symbol_from_A = column_property(
>>>            
>>> sasql.select(A.some_A_marker).select_from(A).join(B).where(B.primary_id == 
>>> C.basedOn_B_id).correlate(C).scalar_subquery().label("symbol_from_A")
>>>        )
>>> 
>>> 
>>> When I query this highlighted column_property along with the whole object, 
>>> it works fine:
>>> 
>>> >>> sess.query(C, C.symbol_from_A).all()
>>> 
>>> However, when I query this column_property alone, it doesn't work:
>>> 
>>> >>>sess.query(C.symbol_from_A).distinct().all()
>>> 
>>> I noticed that somehow the correlated subquery wasn't executed property 
>>> when query that column_property independently.
>>> 
>>> How to solve this?
>>> 
>>> 
>>> 
>>> -- 
>>> 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/f7a0c360-ada2-456b-b02a-498ca50334f3n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/sqlalchemy/f7a0c360-ada2-456b-b02a-498ca50334f3n%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/8549e3f3-11fb-47e1-b86a-270fecce8caan%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/8549e3f3-11fb-47e1-b86a-270fecce8caan%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/b59c73fc-a147-45b7-a184-69e49125354d%40www.fastmail.com.

Reply via email to