You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask使用SimpleConnectionPool管理psycopg2连接出现对象不可下标错误问询

报错原因

该报错的核心是你尝试对Flask类的实例对象使用字典下标语法[]取值,但Flask实例本身没有实现__getitem__方法,不支持这种操作。结合你给出的代码,有两种常见触发场景:

  • 你贴出的放回连接的代码存在笔误,误将current_app.config['pool']写成了current_app['pool'],直接对current_app(也就是Flask实例)用[]取值,触发报错
  • 你执行放回连接代码的位置没有处于Flask激活的应用上下文内,导致current_app指向异常,出现非预期的类型报错
解决方案
  • 首先核对放回连接的代码语法,确保是通过config属性读取配置,正确写法如下:
from flask import current_app

# 假设connection是你之前从连接池取出的连接对象
cursor = connection.cursor()
cursor.execute(self.query) 
connection.commit()
# 确认路径是current_app.config['pool'],不要省略config
current_app.config['pool'].putconn(connection)
  • 如果确认语法没有问题,检查代码执行上下文:如果是在请求上下文之外执行(比如离线脚本、异步任务中),需要手动推入应用上下文后再执行相关操作,示例代码:
from your_app_package import app # 导入你初始化的Flask实例

with app.app_context():
    # 把数据库操作代码放在上下文管理器内部
    connection = get_db()
    cursor = connection.cursor()
    cursor.execute(self.query) 
    connection.commit()
    current_app.config['pool'].putconn(connection)
  • 额外优化建议:可以封装统一的释放连接函数,避免每次手写出现语法错误,示例:
from flask import current_app

def release_db(connection):
    if connection:
        current_app.config['pool'].putconn(connection)

内容的提问来源于stack exchange,提问作者Mark Kewton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 19:51:00