pallets-eco/flask-debugtoolbar

sql_select/sql_explain not working with Flask-SQLAlchemy 3 & SQLAlchemy 2

Open

#232 opened on Feb 7, 2024

View on GitHub
 (2 comments) (2 reactions) (0 assignees)JavaScript (132 forks)batch import
good first issue

Repository metrics

Stars
 (888 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

sql_select() (panels/sqlalchemy.py) seems not tested in https://github.com/pallets-eco/flask-debugtoolbar/pull/186/. The updates introduce some API changes that affect how sql_select() operates:

  • get_engine() requires an initialized (init_app()ed) SQLAlchemy instance.
  • The Engine object no longer has an execute() method directly; instead, obtaining a connection is required for execution.
  • The execute() method does not support positional parameters anymore.

To address these issues, I made some local modifications. Here are the specific changes:

142c142,143
<     engine = SQLAlchemy().get_engine(current_app)
---
>     sqlalchemy = current_app.extensions["sqlalchemy"]
>     engine = sqlalchemy.get_engine()
150c151,152
<     result = engine.execute(statement, params)
---
>     with engine.connect() as connection:
>         result = connection.exec_driver_sql(statement, tuple(params[0]))

Given that I'm uncertain about the repercussions these changes might have on backward compatibility with Flask-SQLAlchemy 2.x versions, and due to time constraints on my end, I'm hesitant to submit a pull request myself. However, it would be great if someone could validate and extend these adjustments to ensure compatibility across both Flask-SQLAlchemy 2.x and 3.x versions.

Contributor guide