使用 python mySQL pooling 来获取和关闭来自 Database Class

问题描述

我有一个 Python 数据库文件MysqL 池设置如下

import MysqL.connector
from MysqL.connector import Error
from MysqL.connector.connection import MysqLConnection
from MysqL.connector import pooling


import pandas as pd
import datetime as dt
from contextlib import closing

#Outside of any function :
connection_pool = MysqL.connector.pooling.MysqLConnectionPool(pool_name="database_pool",pool_size=25,pool_reset_session=True,host='XXXXX',database='XXXXX',user='XXXXX',password='XXXX')

为了获得池连接,我使用位于同一文件中的吹功能

def getDBConnection():
  try:
      connection_obj = connection_pool.get_connection()
      cursor = connection_obj.cursor()
      return connection_obj,cursor
  except Error as e:
     print(f"Error while connecting to MysqL using Connection pool : {e}")

现在假设我想使用池连接(仍在同一个数据库文件中)执行一个简单的选择函数 - 然后返回连接:

def dbGetDataHeadersForRunMenuBySubSet(strSubset):
    connection_object,cursor = getDBConnection() 
    if connection_object.is_connected(): 
        query = 'SELECT * FROM soMetable'
        cursor.execute(query)
           
        #Now close the connection
        closeDBConnection(connection_object,cursor)   

尝试关闭池的代码

def closeDBConnection(connection_obj,cursor):
    if connection_obj.is_connected():
        connection_obj.close()
        cursor.close()

但是在运行 25 次后,我得到错误提示

Error while connecting to MysqL using Connection pool : Failed getting connection; pool exhausted

使用调试器,我可以看到 closeDBConnection 已运行,并且它似乎每一步都没有错误

所以我的问题是: 如果我每次都关闭池,为什么会用完池?

总而言之,我实际上希望建立持久连接,但是在 Python 中我找不到任何关于持久性的真正示例,而且我看过的所有示例似乎都指向池化。我是 Python 新手(ish) - 所以我在这里没有任何问题,我知道我在某处犯了错误

进一步玩了这个: 在每个单独的函数末尾添加“connection_object.close()”将释放 connection_pool 例如

def dbGetDataHeadersForRunMenuBySubSet(strSubset):
    connection_object,cursor = getDBConnection() 
    if connection_object.is_connected(): 
        query = 'SELECT * FROM soMetable'
        cursor.execute(query)
           
        #Now close the connection
        #closeDBConnection(connection_object,cursor) <--- Not working for me
        connection_object.close() <---- This WILL work instead. –

但是与 Excel MysqL Connecter 相比,DB 的东西实在是太慢了(Excel 在做同样的事情时快了近 3 倍。我认为这是因为它很容易在 EXCEL 中获得持久连接——这是我无法做到的python(我是新来的记得;-))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...