数据库连接对象不是用 Python Django SQL Alchemy 数据库池抛出的可调用异常。为什么?
Database connection object is not callable exception thrown with Python Django SQL Alchemy database pooling. Why?
我想要达到的目标
在 Django 中创建一个数据库连接池。连接池使用 SQLAlchemy's connection pooling with django-postgrespool2.
连接到 PostgreSQL 数据库
抛出异常
'psycopg2.extensions.connection' object is not callable
在 运行 以下代码行 poolConnection = dbPool.connect()
时抛出。打印 dbPool
对象和类型显示 <sqlalchemy.pool.impl.QueuePool object at 0x00000171832A72B0> <class 'sqlalchemy.pool.impl.QueuePool'>
代码
创建与 PostgreSQL 数据库的连接并创建连接池的数据库助手 class:
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' object is not callable
?
请记住,我是 Python 和 Django 的新手。所以我可能遗漏了一些对某些 Python and/or Django 开发人员来说显而易见的东西。
谢谢!
根据 QueuePool
文档,第一个参数应该是 'a callable function that returns a DB-API connection object'。
您已将被调用函数的结果作为第一个参数而不是函数本身传递给 QueuePool
对象。去掉括号解决问题:
def createPool(self):
dbConnection = self.dbConnect
global dbPool
dbPool = pool.QueuePool(dbConnection, max_overflow=10, pool_size=5)
我想要达到的目标
在 Django 中创建一个数据库连接池。连接池使用 SQLAlchemy's connection pooling with django-postgrespool2.
连接到 PostgreSQL 数据库抛出异常
'psycopg2.extensions.connection' object is not callable
在 运行 以下代码行 poolConnection = dbPool.connect()
时抛出。打印 dbPool
对象和类型显示 <sqlalchemy.pool.impl.QueuePool object at 0x00000171832A72B0> <class 'sqlalchemy.pool.impl.QueuePool'>
代码
创建与 PostgreSQL 数据库的连接并创建连接池的数据库助手 class:
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' object is not callable
?
请记住,我是 Python 和 Django 的新手。所以我可能遗漏了一些对某些 Python and/or Django 开发人员来说显而易见的东西。
谢谢!
根据 QueuePool
文档,第一个参数应该是 'a callable function that returns a DB-API connection object'。
您已将被调用函数的结果作为第一个参数而不是函数本身传递给 QueuePool
对象。去掉括号解决问题:
def createPool(self):
dbConnection = self.dbConnect
global dbPool
dbPool = pool.QueuePool(dbConnection, max_overflow=10, pool_size=5)