aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fietsboek/models/__init__.py13
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):