use non-deprecated event to register foreign_keys connection listener

This commit is contained in:
Min RK
2018-12-12 15:41:09 +01:00
parent 0e6cf6a485
commit a46032b549

View File

@@ -19,7 +19,6 @@ from sqlalchemy import (
DateTime, Enum, Table, DateTime, Enum, Table,
) )
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.interfaces import PoolListener
from sqlalchemy.orm import ( from sqlalchemy.orm import (
Session, Session,
interfaces, object_session, relationship, sessionmaker, interfaces, object_session, relationship, sessionmaker,
@@ -559,10 +558,13 @@ class DatabaseSchemaMismatch(Exception):
""" """
class ForeignKeysListener(PoolListener): def register_foreign_keys(engine):
"""Enable foreign keys on sqlite""" """register PRAGMA foreign_keys=on on connection"""
def connect(self, dbapi_con, con_record): @event.listens_for(engine, "connect")
dbapi_con.execute('pragma foreign_keys=ON') def connect(dbapi_con, con_record):
cursor = dbapi_con.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
def _expire_relationship(target, relationship_prop): def _expire_relationship(target, relationship_prop):
@@ -735,8 +737,6 @@ def new_session_factory(url="sqlite:///:memory:",
"""Create a new session at url""" """Create a new session at url"""
if url.startswith('sqlite'): if url.startswith('sqlite'):
kwargs.setdefault('connect_args', {'check_same_thread': False}) kwargs.setdefault('connect_args', {'check_same_thread': False})
listeners = kwargs.setdefault('listeners', [])
listeners.append(ForeignKeysListener())
elif url.startswith('mysql'): elif url.startswith('mysql'):
kwargs.setdefault('pool_recycle', 60) kwargs.setdefault('pool_recycle', 60)
@@ -747,6 +747,9 @@ def new_session_factory(url="sqlite:///:memory:",
kwargs.setdefault('poolclass', StaticPool) kwargs.setdefault('poolclass', StaticPool)
engine = create_engine(url, **kwargs) engine = create_engine(url, **kwargs)
if url.startswith('sqlite'):
register_foreign_keys(engine)
# enable pessimistic disconnect handling # enable pessimistic disconnect handling
register_ping_connection(engine) register_ping_connection(engine)