From d6cc6c7217b9dc8343463198018ae9d9c5fe64f7 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Sun, 16 Nov 2025 13:00:22 +0100 Subject: enable foreign key checks in SQLite --- fietsboek/models/__init__.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fietsboek/models/__init__.py b/fietsboek/models/__init__.py index c70fee1..e16c0ee 100644 --- a/fietsboek/models/__init__.py +++ b/fietsboek/models/__init__.py @@ -5,7 +5,7 @@ access the submodules if you need some of the auxiliary definitions. """ import zope.sqlalchemy -from sqlalchemy import engine_from_config +from sqlalchemy import engine_from_config, event from sqlalchemy.orm import configure_mappers, sessionmaker from .badge import Badge # flake8: noqa @@ -24,7 +24,16 @@ configure_mappers() def get_engine(settings, prefix="sqlalchemy."): """Create an SQL Engine from the given settings.""" - return engine_from_config(settings, prefix) + engine = engine_from_config(settings, prefix) + + # SQLite is quite loose with foreign keys by default, so make sure it + # checks them. + def _fk_pragma_on_connect(dbapi_con, con_record): + dbapi_con.execute("PRAGMA foreign_keys=ON;") + + if engine.dialect.name == "sqlite": + event.listen(engine, "connect", _fk_pragma_on_connect) + return engine def get_session_factory(engine): -- cgit v1.2.3