diff options
author | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2013-01-18 18:42:52 +0100 |
---|---|---|
committer | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2013-01-18 18:42:52 +0100 |
commit | afbfd40578ca93babe191bb0edef360822c91a27 (patch) | |
tree | 64248b6ec6ee4b64d4113a22ca0e22035098d32c | |
parent | 5bae4af14e8a8cbefefb9093be53c69311a81a20 (diff) | |
download | mediagoblin-afbfd40578ca93babe191bb0edef360822c91a27.tar.lz mediagoblin-afbfd40578ca93babe191bb0edef360822c91a27.tar.xz mediagoblin-afbfd40578ca93babe191bb0edef360822c91a27.zip |
Enable foreign key checking on sqlite.
sqlite normally does not check foreign key referential
integrity. But it can do so.
So let's use it. Better safe than sorry.
-rw-r--r-- | mediagoblin/db/open.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/mediagoblin/db/open.py b/mediagoblin/db/open.py index d976acd8..5fd5ed03 100644 --- a/mediagoblin/db/open.py +++ b/mediagoblin/db/open.py @@ -15,7 +15,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -from sqlalchemy import create_engine +from sqlalchemy import create_engine, event import logging from mediagoblin.db.base import Base, Session @@ -66,9 +66,20 @@ def load_models(app_config): exc)) +def _sqlite_fk_pragma_on_connect(dbapi_con, con_record): + """Enable foreign key checking on each new sqlite connection""" + dbapi_con.execute('pragma foreign_keys=on') + + def setup_connection_and_db_from_config(app_config): engine = create_engine(app_config['sql_engine']) + + # Enable foreign key checking for sqlite + if app_config['sql_engine'].startswith('sqlite://'): + event.listen(engine, 'connect', _sqlite_fk_pragma_on_connect) + # logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) + Session.configure(bind=engine) return DatabaseMaster(engine) |