Skip to content

[FastAPI] Refactor db modifications

Kevin Morris requested to merge kevr/aurweb:pu_db_transactions into pu

For SQLAlchemy to automatically understand updates from the external world, it must use an autocommit=True in its session.

This change breaks how we were using commit previously, as autocommit=True causes SQLAlchemy to commit when a SessionTransaction context hits exit.

So, a refactoring was required of our tests: All usage of any db.{create,delete} must be called within a SessionTransaction context, created via new db.begin().

From this point forward, we're going to require:

with db.begin():
    db.create(...)
    db.delete(...)
    db.session.delete(object)

With this, we now get external DB modifications automatically without reloading or restarting the FastAPI server, which we absolutely need for production.

Signed-off-by: Kevin Morris kevr@0cost.org

Merge request reports