diff --git a/src/drt/database/executor.py b/src/drt/database/executor.py index bfe7d8d..9b7ca94 100755 --- a/src/drt/database/executor.py +++ b/src/drt/database/executor.py @@ -75,6 +75,24 @@ class QueryExecutor: raise ValueError("Only SELECT queries are allowed (READ ONLY)") try: + # Convert tuple params to dict for SQLAlchemy 2.0 compatibility + if isinstance(params, tuple): + # Map positional params to p1, p2, p3... + params_dict = {f"p{i}": val for i, val in enumerate(params, 1)} + # Replace ? placeholders with :p1, :p2... by iterating + query_parts = [] + last_pos = 0 + param_index = 1 + for char_pos, char in enumerate(query): + if char == '?': + query_parts.append(query[last_pos:char_pos]) + query_parts.append(f':p{param_index}') + last_pos = char_pos + 1 + param_index += 1 + query_parts.append(query[last_pos:]) + query = ''.join(query_parts) + params = params_dict + with self._engine.connect() as conn: result = conn.execute(text(query), params or {}) df = pd.DataFrame(result.all(), columns=result.keys())