On Tue, Aug 23, 2022, at 3:00 PM, Evgenii wrote:
> 
> Thanks a lot!
> I used “vectorized” for sqlalchemy.orm.Session.refresh method and mean that 
> it would be nice to use:
> 
> `session.refresh(instances_list)
`
> that make a single query to database. Instead of:
> 


do this:

session.execute(
   select(Instance).where(Instance.id.in([list_of_ids]), 
execution_options={"populate_existing": True})
)

all objects refreshed



> `for el in instances_list:
>     session.refresh(el)
`
> that make N queries.
> 
> like:
> 
> `res = session.query(InstrumentTable).filter(InstrumentTable.id.in_([id1, 
> id2, ..., idn])).all()
> *# and sort res with given ids order*
`
> is much faster than (especially in low network connections):
> 
> `instuments = [session.query(InstrumentTable).get(id_) *for* id_ *in* [id1, 
> id2, ..., idn]]
`
> 
> вторник, 23 августа 2022 г. в 21:04:05 UTC+3, Mike Bayer: 
>> 
>> 
>> On Tue, Aug 23, 2022, at 1:50 PM, Evgenii wrote:
>>> Hi there!
>>> 
>>> 
>>> 
>>> Please help me to understand:
>>> I want to make two equal queries, that sends real queries to database each 
>>> time:
>>> 
>>> 
>>> `session.query(InstrumentTable).get(instr_id)
>>> <some other code>
>>> session.query(InstrumentTable).get(instr_id)
`
>>> 
>>> 
>>> The problem is that second query returns instance from identity_map.
>>> I know how to hardcode it, but I want a beautiful solution.
>>> 
>>> 
>>>  1. No, I cannot use refresh method, because it is not vectorized
>>> (this part of code is used in custom vectorized refresh method,
>>> because in our case each transaction is slow and therefore expensive) -
>>> having vectorized SA refresh is a perfect solution, but it does not exist.
>> 
>> "vectorized".   googled it, seems to mean "Vectorization is the process of 
>> converting an algorithm from operating on a single value at a time to 
>> operating on a set of values at one time. "  OK.   which would mean that 
>> get() is also not "vectorized" since it also operates on one value at a 
>> time...so..not really sure what that means. 
>> 
>> Anyway, don't use query.get(), use session.get() and pass populate_existing
>> 
>> https://docs.sqlalchemy.org/en/14/orm/session_api.html?highlight=session+get#sqlalchemy.orm.Session.get
>> 
>> session.get(InstrumentTable, id, populate_existing=True)
>> 
>> 
>> 
>> 
>>> 
>>>  1. rollback make real second query, but it seems to be hardcode.
>>>  2. session.identity_map._dict = {} hardcode too
>>>  3. Opening another session hardcode too.
>>>  4. Using one of AUTOCOMMIT, READ COMMITTED, READ UNCOMMITTED,
>>> REPEATABLE READ, SERIALIZABLE as isolation_level seems to be a true way,
>>> but none of them does not work as I expect.
>>> 
>>> 
>>> 
>>> -- 
>>> 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/0808aeb1-e32d-4a42-bac2-959ee6d03ba7n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/sqlalchemy/0808aeb1-e32d-4a42-bac2-959ee6d03ba7n%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 [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/4af71fa7-9cbe-478f-84dc-8df6ba856a1en%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/4af71fa7-9cbe-478f-84dc-8df6ba856a1en%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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/1686ffa4-9ece-4d2f-b250-ee5241bf03b6%40www.fastmail.com.

Reply via email to