From 810e8c81a971dac726c0b8224c1bb2fa85f07aec Mon Sep 17 00:00:00 2001 From: asharbabar Date: Tue, 30 Dec 2025 00:14:04 +0400 Subject: [PATCH 1/2] Update execute_sql function for SQLAlchemy v2 support Refactor SQL execution logic to support SQLAlchemy version 2 --- jsql/__init__.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/jsql/__init__.py b/jsql/__init__.py index b103431..775f778 100644 --- a/jsql/__init__.py +++ b/jsql/__init__.py @@ -7,6 +7,11 @@ import six import itertools, collections +import sqlalchemy + +SQLALCHEMY_VERSION = sqlalchemy.__version__ +IS_VERSION_2 = SQLALCHEMY_VERSION.startswith("2.") + class UnsafeSqlException(Exception): pass @@ -78,12 +83,20 @@ def dangerously_inject_sql(value): jenv.filters["dangerously_inject_sql"] = dangerously_inject_sql jenv.globals["comma"] = DangerouslyInjectedSql(",") - def execute_sql(engine, query, params): from sqlalchemy.sql import text q = text(query) - is_session = 'session' in repr(engine.__class__).lower() - return engine.execute(q, params=params) if is_session else engine.execute(q, **params) + + if IS_VERSION_2: + if hasattr(engine, 'execute'): + return engine.execute(q, params) + + if isinstance(engine, Engine): + with engine.connect() as conn: + return conn.execute(q, params) + else: + is_session = 'session' in repr(engine.__class__).lower() + return engine.execute(q, params=params) if is_session else engine.execute(q, **params) BINDPARAM_PREFIX = 'bp' def gen_bindparam(params): From a6665192df7dc5d7cb5b48da4b3ec73d97f5cb09 Mon Sep 17 00:00:00 2001 From: asharbabar Date: Tue, 30 Dec 2025 00:15:42 +0400 Subject: [PATCH 2/2] import Engine Import Engine from sqlalchemy.engine for SQL execution. --- jsql/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/jsql/__init__.py b/jsql/__init__.py index 775f778..0a28ad2 100644 --- a/jsql/__init__.py +++ b/jsql/__init__.py @@ -84,6 +84,7 @@ def dangerously_inject_sql(value): jenv.globals["comma"] = DangerouslyInjectedSql(",") def execute_sql(engine, query, params): + from sqlalchemy.engine import Engine from sqlalchemy.sql import text q = text(query)