Flask-SQLAlchemy version3.1.x 旧语法不再起作用

问题描述 投票:0回答:1

我安装的版本:3.1.1

要执行 RAW MySQL 查询,在我更新到 3.1.1 之前,以下方法可以工作。我已经使用它三年了。文档称它已被弃用并将很快被删除。

qres = db.get_engine(current_app, my_database_target).execute(qry_string)

或者在默认数据库上运行,

qres = db.get_engine(current_app).execute(qry_string)

现在出现以下错误。

Traceback (most recent call last):
  File "/home/sdfasdfasdf/projects/project_name/application/b_name/func/__init__.py", line 2330, in getQueryResults
    qres = db.get_engine(current_app).execute(qry)
  File "/home/sdfasdfasdf/.local/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 737, in get_engine
    return self.engines[bind_key]
KeyError: <LocalProxy unbound>

文档说使用db.engines[key]

如何使用它? 我花了几个小时查看文档并对一堆对象执行 dir() 操作,并使用 vscode 按下 ctrl+space 来查看该对象具有哪些方法。 似乎没有一个对象具有像

db.engines[None].engine.execute(qry_string)

这样的执行方法

任何帮助都将是非凡的。

我已尝试按照文档中的建议使用新语法。

sqlalchemy flask-sqlalchemy
1个回答
0
投票

好的。由于文档太新,因此没有给出任何内容。这是我从 github 上的问题中收集到的我可以接受的解决方案。

循环

for key,engine in db.engines.items():

检查密钥是否与您的绑定名称匹配。默认数据库的键为 None 。

然后

result=engine.connect().execute(text("Your Raw SQL Query"))

我真的希望有一种方法可以通过使用bind_key直接连接到所需的引擎,而不是循环遍历所有引擎。

© www.soinside.com 2019 - 2024. All rights reserved.