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 (888 stars) (132 forks)batch import
good first issue

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