Sqlite / SQLAlchemy: enforce Foreign Keys
authorSofia Papagiannaki <papagian@gmail.com>
Mon, 12 Sep 2011 13:38:56 +0000 (16:38 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Mon, 12 Sep 2011 13:38:56 +0000 (16:38 +0300)
Fixes  #1075

pithos/backends/lib/sqlalchemy/dbwrapper.py

index 2ac0e35..1958f7c 100644 (file)
 
 from sqlalchemy import create_engine
 from sqlalchemy.pool import NullPool
+from sqlalchemy.interfaces import PoolListener
 
 class DBWrapper(object):
     """Database connection wrapper."""
     
     def __init__(self, db):
         if db.startswith('sqlite://'):
-            self.engine = create_engine(db, connect_args={'check_same_thread': False}, poolclass=NullPool)
+            class ForeignKeysListener(PoolListener):
+                def connect(self, dbapi_con, con_record):
+                    db_cursor = dbapi_con.execute('pragma foreign_keys=ON')
+            self.engine = create_engine(db, connect_args={'check_same_thread': False}, poolclass=NullPool, listeners=[ForeignKeysListener()])
         else:
             self.engine = create_engine(db)
+        #self.engine.echo = True
         self.conn = self.engine.connect()
         self.trans = None