I am developing an app together with a partner. I do the database part in PostgreSQL, my partner implements the app on the web-server with Python using SQLAlchemy. We make heavy use of server-side functions. A SELECT
query on one of those looks like this in the DB log:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT col_a, col_b FROM some_func(E'myvalue');
ROLLBACK;
In the functions I write certain input to a log table. The app queries by SELECT
, SQLAlchemy only sees a SELECT
statement and insists on a ROLLBACK
. Logging fails. I need it to COMMIT
instead. My partner claims there is no easy way, we would have to remove SQLAlchemy altogether. I think he must be wrong but lack the knowledge to claim otherwise.
Is there an easy way to make SQLAlchemy COMMIT
instead of ROLLBACK
?
What keeps me from just executing trans.commit()
? Do I need to set autoflush=False
for that?
I have scanned the FAQ, but did not find an answer there.
Searching SO revealed some related questions like here and here, but I am not in the clear.
Maybe this recipe would work?
COMMIT
to keep the framework from rolling back? – HuihuieSession
instance managed? – Hankhanke