vibe.review.database

Database connection management for VIBE Review.

Provides SQLAlchemy session management with support for: - Flask app context integration - Standalone usage (CLI, tests) - Connection pooling

FlaskDBExtension

Flask extension for database session management.

Usage

db = FlaskDBExtension() db.init_app(app)

In request context:

with db.session() as session: ...

init_app

init_app(app: Flask) -> None

Initialize with Flask app.

session

session() -> Generator[Session, None, None]

Get a database session within Flask app context.

get_database_url

get_database_url() -> str

Get database URL from Flask app config, env (test bootstrap), or default.

get_engine

get_engine(database_url: str | None = None, *, sql_echo: bool | None = None) -> Engine

Get or create the SQLAlchemy engine.

Uses connection pooling with sensible defaults for web applications.

get_session_factory

get_session_factory(database_url: str | None = None) -> sessionmaker[Session]

Get or create the session factory.

get_db_session

get_db_session(database_url: str | None = None) -> Generator[Session, None, None]

Context manager for database sessions.

Usage

with get_db_session() as session: requirements = session.query(RequirementCacheModel).all()

Automatically commits on success, rolls back on exception.

init_db

init_db(database_url: str | None = None, drop_existing: bool = False) -> None

Initialize the database schema.

Parameters:
  • database_url (str | None, default: None ) –

    Optional database URL (uses default if not provided)

  • drop_existing (bool, default: False ) –

    If True, drops all tables before creating

reset_connection_pool

reset_connection_pool() -> None

Reset the connection pool.

Useful for tests or when database configuration changes.

init_app

init_app(app: Flask) -> None

Initialize the review database with a Flask app.

This is the module-level entry point for Flask integration.

get_request_session

get_request_session() -> Session

Get a database session scoped to the current Flask request.

The session is automatically closed at the end of the request. For use in Flask route handlers where automatic commit/rollback is not desired (routes manage their own transactions).