from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager from sqlalchemy import event from sqlalchemy.engine import Engine import sqlite3 db = SQLAlchemy() migrate = Migrate() login_manager = LoginManager() login_manager.login_view = 'auth.login' login_manager.login_message = 'Please log in to access this page.' login_manager.login_message_category = 'warning' @event.listens_for(Engine, "connect") def _set_sqlite_pragma(dbapi_connection, connection_record): """Enable WAL mode and sane concurrency settings for SQLite. WAL lets readers and writers operate concurrently, which prevents 'database is locked' errors when running under multi-worker Gunicorn. """ if isinstance(dbapi_connection, sqlite3.Connection): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA journal_mode=WAL") cursor.execute("PRAGMA busy_timeout=5000") cursor.execute("PRAGMA synchronous=NORMAL") cursor.close()