On Thu, Mar 26, 2020, at 2:45 PM, Colton Allen wrote:
> Aside from disabling expire_on_commit, any thoughts on how I can prevent this 
> error? I guess I just need a method to force the attribute refresh to use the 
> master database. I'm just not sure where I should put that. Thoughts?

is the issue that your follower database is only updating asynchronously? I 
would likely organize the application to simply use two different Session 
objects, one for master one for follower. Trying to do it on a per-query basis 
is needlessly implicit and complicated. Individual service methods would 
declare whether they are "read only" or "writer" and they start out with one or 
the other session/engine. That's how we do it in Openstack. thinking in terms 
of logical service methods rather than individual queries is the way to go.


> 
> I think one of my previous comments got lost because of formatting. Quoting 
> it here for safety.
> 
> "I agree with your assessment. I think its because every time I call 
> "session". I'm actually saying "scoped_session(session_maker)()". So the 
> _flushing attribute will be reset because its a new session instance."
> 
> 
> 
> On Thursday, March 26, 2020 at 1:35:14 PM UTC-5, Mike Bayer wrote:
>> 
>> 
>> On Thu, Mar 26, 2020, at 2:18 PM, Colton Allen wrote:
>>> > You can adjust `expire_on_commit` if you're only doing short-term 
>>> > read-only actions.
>>> 
>>> Can you expand on this? Or link to docs/blog so I can do some research. 
>>> Google hasn't helped me so far. Why would I want to expire after every 
>>> commit?
>> 
>> because once the transaction is completed, there are other transactions 
>> going on in a database concurrently which can change the state of the 
>> objects as they are represented in the database. in order that when you next 
>> access these local objects so that they have the correct state, they are 
>> automatically expired. However this behavior is not desirable in many cases, 
>> so this flag is very commonly used to disable this behavior when you are not 
>> concerned about your objects having stale data relative to other 
>> transactions going on, when the new transaction begins.
>> 
>> this behavior is described at: 
>> https://docs.sqlalchemy.org/en/13/orm/session_basics.html#committing
>> 
>> 
>> 
>> 
>>> 
>>> ---
>>> 
>>> I agree with your assessment. I think its because every time I call 
>>> "session". I'm actually saying "session_maker()". So the _flushing 
>>> attribute will be reset because its a new session instance.
>>> 
>>> On Thursday, March 26, 2020 at 1:02:18 PM UTC-5, Jonathan Vanasco wrote:
>>>> My first guess is two things are going on:
>>>> 
>>>> 1. This is a behavior of `expire_on_commit` on the session. Once you 
>>>> commit on the Primary database, the object is stale.
>>>> https://docs.sqlalchemy.org/en/13/orm/session_api.html
>>>> 
>>>> 2. The session is then trying to read off a Secondary database, but the 
>>>> row has not yet synced.
>>>> 
>>>> You can adjust `expire_on_commit` if you're only doing short-term 
>>>> read-only actions. However, I would explore to ensure this is trying to 
>>>> read off the other database and why.
>>> 

>>> --
>>> 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 sqlal...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sqlalchemy/8185b96d-35cb-4973-a9cf-1e572ebd643b%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/sqlalchemy/8185b96d-35cb-4973-a9cf-1e572ebd643b%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/dd5c4d05-5af3-451e-b965-52ac50b432ac%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/dd5c4d05-5af3-451e-b965-52ac50b432ac%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/fb0b1236-1dee-454f-8971-c02c24d3a2c8%40www.fastmail.com.

Reply via email to