On Wed, Aug 24, 2022, at 6:32 AM, Evgenii wrote: > > Thank you one more time! > Just in case I leave fixed expression here: > > `session.execute( > select(Instance).where(Instance.id.in([list_of_ids])), > execution_options={"populate_existing": True} > ) ` > Is there any way to set populate_existing = True for engine or sessionmaker? >
not right now, there is an issue to maybe have session-wide execution options. the option can be set on an engine but I'm not sure it takes effect for the ORM when set only at the engine level. > > вторник, 23 августа 2022 г. в 22:34:23 UTC+3, Mike Bayer: >> >> >> 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 >> <http://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 sqlalchemy+...@googlegroups.com. >>>>> 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 sqlalchemy+...@googlegroups.com. >>> 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 sqlalchemy+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/81c91918-95c4-413d-b25b-312c0b24f75en%40googlegroups.com > > <https://groups.google.com/d/msgid/sqlalchemy/81c91918-95c4-413d-b25b-312c0b24f75en%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/c681a92e-26b7-497d-8f8c-d577a4ff146e%40www.fastmail.com.