mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-15 14:03:02 +00:00
use non-deprecated event to register foreign_keys connection listener
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user