2626from sqlalchemy import Boolean
2727from sqlalchemy import delete
2828from sqlalchemy import Dialect
29+ from sqlalchemy import event
2930from sqlalchemy import ForeignKeyConstraint
3031from sqlalchemy import func
3132from sqlalchemy import Text
@@ -366,6 +367,12 @@ class StorageUserState(Base):
366367 )
367368
368369
370+ def set_sqlite_pragma (dbapi_connection , connection_record ):
371+ cursor = dbapi_connection .cursor ()
372+ cursor .execute ("PRAGMA foreign_keys=ON" )
373+ cursor .close ()
374+
375+
369376class DatabaseSessionService (BaseSessionService ):
370377 """A session service that uses a database for storage."""
371378
@@ -374,9 +381,13 @@ def __init__(self, db_url: str, **kwargs: Any):
374381 # 1. Create DB engine for db connection
375382 # 2. Create all tables based on schema
376383 # 3. Initialize all properties
377-
378384 try :
379385 db_engine = create_engine (db_url , ** kwargs )
386+
387+ if db_engine .dialect .name == "sqlite" :
388+ # Set sqlite pragma to enable foreign keys constraints
389+ event .listen (db_engine , "connect" , set_sqlite_pragma )
390+
380391 except Exception as e :
381392 if isinstance (e , ArgumentError ):
382393 raise ValueError (
0 commit comments