aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElrond <elrond+mediagoblin.org@samba-tng.org>2013-01-18 18:42:52 +0100
committerElrond <elrond+mediagoblin.org@samba-tng.org>2013-01-18 18:42:52 +0100
commitafbfd40578ca93babe191bb0edef360822c91a27 (patch)
tree64248b6ec6ee4b64d4113a22ca0e22035098d32c
parent5bae4af14e8a8cbefefb9093be53c69311a81a20 (diff)
downloadmediagoblin-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.py13
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)