A new suite of unittests shed light on what appears to be anti-pattern in
an application. I'm not sure how to address this one.
The general flow of a particular web request is this:
Phase 1- load some database objects for general verification
Phase 2- loop through a handful of routines to create some items. each
routine is an isolated transaction - not a subtransaction
so it looks like this...
# Phase1
foo = dbSession.query(FOO).all()
# Phase2
for i in (a, b, c):
bar = BAR()
dbSession.add(bar)
dbSession.commit()
The problem occurs sporadically in Phase2, when the code attempts to
address a lazyloaded attribute of the `foo` loaded in Phase1, and I get the
error
exc.ResourceClosedError("This Connection is closed")
Digging into the events API and tracking everything, it appears my
connection is returned to the pool and closed on every `commit`.
I'm roughly seeing the events happen like this (the order of where the
'action' happens may be shifted up or down a line):
Phase 1
connect
checkin
engine_connect
Phase 2 Action
commit
reset
checkout
checkin
engine_connect
Phase 2 Action
commit
reset
checkout
checkin
engine_connect
Phase 2 Action
EXCEPTION
Is there a way to ensure the session doesn't close/checkin the connection
on certain commits or is there a better strategy to deal with this
anti-pattern -- perhaps figuring out a way to update the object
sessions/connections ?
I only have a handful of situations where there are multiple transactions
like this - maybe 1% of the potential views.
It does look like I have two problems here too:
1. The symptom/problem of not being able to load this data from a previous
transaction.
2. The underlying problem of losing a connection in a request, when I know
I want to keep it for immediate use again.
--
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 post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.