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 /mediagoblin/db/open.py | |
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.
Diffstat (limited to 'mediagoblin/db/open.py')
-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) |