Skip to content

Commit 0c87907

Browse files
DeanChensjcopybara-github
authored andcommitted
fix: Enforce foreign key constraint for SQLite DB
Resolves #2752 PiperOrigin-RevId: 801106660
1 parent 214f288 commit 0c87907

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/google/adk/sessions/database_session_service.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from sqlalchemy import Boolean
2727
from sqlalchemy import delete
2828
from sqlalchemy import Dialect
29+
from sqlalchemy import event
2930
from sqlalchemy import ForeignKeyConstraint
3031
from sqlalchemy import func
3132
from 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+
369376
class 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

Comments
 (0)