diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2025-11-16 13:00:22 +0100 |
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2025-11-16 13:00:22 +0100 |
| commit | d6cc6c7217b9dc8343463198018ae9d9c5fe64f7 (patch) | |
| tree | 2a9dc39bb522b5666f0dd854b73e98a51f3e928d | |
| parent | af4365288c9b7a6516738c9d933c6fd1201a9a22 (diff) | |
| download | fietsboek-d6cc6c7217b9dc8343463198018ae9d9c5fe64f7.tar.gz fietsboek-d6cc6c7217b9dc8343463198018ae9d9c5fe64f7.tar.bz2 fietsboek-d6cc6c7217b9dc8343463198018ae9d9c5fe64f7.zip | |
enable foreign key checks in SQLite
| -rw-r--r-- | fietsboek/models/__init__.py | 13 |
1 files 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): |
