问题描述
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()
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 (将#修改为@)