数据库连接对象不可调用。Python Django SQL Alchemy数据库池引发异常。为什么? 我想要达到的目标

数据库连接对象不可调用。Python Django SQL Alchemy数据库池引发异常。为什么? 我想要达到的目标,python,django,postgresql,sqlalchemy,connection-pool,Python,Django,Postgresql,Sqlalchemy,Connection Pool,在Django中创建数据库连接池。连接池通过使用with连接到PostgreSQL数据库 抛出异常 'psycopg2.extensions.connection'对象不可调用在运行以下代码行时抛出poolConnection=dbPool.connect()。打印dbPool对象和类型将显示 代码 创建到PostgreSQL数据库的连接并创建连接池的Database helper类: import psycopg2 from sqlalchemy import pool import trac

在Django中创建数据库连接池。连接池通过使用with连接到PostgreSQL数据库

抛出异常
'psycopg2.extensions.connection'对象不可调用
在运行以下代码行时抛出
poolConnection=dbPool.connect()
。打印
dbPool
对象和类型将显示

代码 创建到PostgreSQL数据库的连接并创建连接池的Database helper类:

import psycopg2
from sqlalchemy import pool
import traceback

dbPool = None

class DbPoolHelper:

    def ensurePoolCreated(self):
        global dbPool
        if dbPool != None:
            return
            
        self.createPool()

    def dbConnect(self):
        dbConnection = psycopg2.connect(user="...", password="...", dbname="...", host="...",port="...")
        return dbConnection

    def createPool(self):
        dbConnection = self.dbConnect()
        global dbPool
        dbPool = pool.QueuePool(dbConnection, max_overflow=10, pool_size=5)

    def execute(self, sql, sqlParams):
        try:
            global dbPool
            self.ensurePoolCreated()
            poolConnection = dbPool.connect()
            cursor = poolConnection.cursor()
            cursor.execute(sql, sqlParams)
            poolConnection.commit()
            result = cursor.fetchall()
            cursor.close()
            poolConnection.close()
            return result
        except Exception as e:
            print(e)
            return e
代码使用
DbPoolHelper
通过
execute
方法获取一些数据,并提供一些sql和sql参数作为参数:

def poolTest():
    sql = "SELECT * FROM sysproductcontainers;"
    sqlParams = ()
    db = DbPoolHelper()
    result = db.execute(sql, sqlParams)
问题: 为什么代码抛出“psycopg2.extensions.connection”对象不可调用

请记住,我对Python和Django非常陌生。因此,我可能缺少一些Python和/或Django开发人员明显的东西

谢谢

根据文档,第一个参数应该是“返回DB-API连接对象的可调用函数”

您已将调用函数的结果作为第一个参数而不是函数本身传递给
QueuePool
对象。删除括号以解决问题:

def createPool(self):
dbConnection=self.dbConnect
全局数据库池
dbPool=pool.QueuePool(dbConnection,最大溢出=10,池大小=5)