尽管从相同的 requirements.txt 安装依赖项,但相同的代码在 venv 中不起作用

Same code does not work in venv despite installing dependencies from same requirements.txt

我正在开发 Web 应用程序并尝试从 Spyder 迁移到 VS Code。 它使用默认解释器,所以我创建了一个新的 venv,但是当我启动服务器时,它不能使用没有 venv 的相同代码。 错误描述:

File "C:\Users\User\Desktop\Flask\app.py", line 77, in index
measurement_mx = rs.all()
AttributeError: 'ResultProxy' object has no attribute 'all' 

我安装了与 pip install -r requirements.txt 完全相同的依赖项。

你能帮我解决一下吗,很遗憾我找不到这个问题。

相关代码片段:

@app.route('/', methods=['POST', 'GET'])
def index():  
    with engine.connect() as con:
        rs = con.execute(SQL_string)
        measurement_mx = rs.all() #this is the error line
        measurement_list = []
        for row in measurement_mx:
            measurement_list.append(row._data)
        measurement_list = transpose(measurement_list)
    return render_template('index.html', measurement_list=measurement_list )

提前致谢!

欢迎使用 Whosebug!

问题可能是您的 requirements.txt 文件可能指定了要安装的软件包,但没有指定它们的确切版本,所以请问:

  • 粘贴您的需求文件的内容?
  • 检查两个虚拟环境之间的软件包版本?

一些想法:

现在,关于您的具体问题:ResultProxy 不是来自 flask 的对象,而是来自 SQLAlchemy 的对象,其中 SQLAchemy v1.4 replaced:

class sqlalchemy.engine.Result(cursor_metadata)

Represent a set of database results.

New in version 1.4: The Result object provides a completely updated usage model and calling facade for SQLAlchemy Core and SQLAlchemy ORM. In Core, it forms the basis of the CursorResult object which replaces the previous ResultProxy interface. When using the ORM, a higher level object called ChunkedIteratorResult is normally used.

(强调我的)

这意味着您可以:

  • 要么修复 requirements.txt 文件中的 SQLAlchemy 版本,
  • 或更新您的代码以适应当前的 SQLAlchemy 语法。