【发布时间】:2020-01-22 11:09:03
【问题描述】:
我想将我的 python 程序从普通连接更改为连接池,以便在几个小时内没有发送查询时数据库连接不会丢失,并且数据库不会被一堆查询淹没使用高峰期。
我正在使用 Python 3.7.4、mysql-connector-python 8.0.17 和 MariaDB 10.4.7。
当我使用普通连接时它工作正常,但 MariaDB 显然不支持 mysql.connector.pooling.MySQLConnectionPool 的 pool_reset_session 设置
在我的代码开始时,它会尝试创建尚不存在的数据库,这导致了我得到的错误。
import mysql.connector as mariadb
from mysql.connector import errorcode
from mysql.connector import pooling
cnx = mariadb.pooling.MySQLConnectionPool(user='root', password='password', host='localhost',
pool_name='connectionpool', pool_size=10, pool_reset_session=True)
try:
db = cnx.get_connection()
cursor = db.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS tests")
print("Created database")
except mariadb.Error as err:
print(f"Failed creating database: {err}")
finally:
print("Finally (create)")
db.close()
我希望这个 sn-p 只会创建数据库 tests,但我得到了以下两个错误:
mysql.connector.errors.NotSupportedError: MySQL version 5.7.2 and earlier does not support COM_RESET_CONNECTION.
还有
mysql.connector.errors.OperationalError: 1047 (08S01): Unknown command
从追溯日志来看,这似乎是由于尝试在第 17 行执行 db.close() 而引起的。
带有回溯的完整输出: https://pastebin.com/H3SAvA9N
我在问我能做些什么来解决这个问题,以及是否有可能在 MariaDB 10.4.7 中使用这种连接池(我很困惑,因为它说 MySQL
我还发现 MariaDB Connector/J 确实提供了这样一个选项,称为 useResetConnection,但我不想仅仅为了这个功能而学习 Java。
【问题讨论】:
标签: python-3.x mariadb mysql-connector-python