gpt4 book ai didi

mysql.connector.connect 似乎没有通过函数实现持久连接

转载 作者:行者123 更新时间:2023-11-29 16:57:08 25 4
gpt4 key购买 nike

我在使用 Flask 框架的 python 中的 mysql 时遇到了一些问题。我已经设置了一个函数(get_db())来在收到请求后连接到数据库,并为稍后请求它的函数提供相同的连接(在同一请求内)。

import mysql.connector #mysql-connector-python==8.0.12

def get_db():
if 'db' not in g:
try:
click.echo("Trying to connect")
cnx = mysql.connector.connect(user='stack', password='overflow',
host='127.0.0.1',
database=DB_NAME)
g.db = cnx
return g.db
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
click.echo("Connection failed! Check username and password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
click.echo("Database does not exist")
else:
click.echo("Unknown error: {} ".format(err))
else:
cnx.close()
# Connection to db cannot
# be established.
# click.echo("Will exit from database")
exit(1)

click.echo("Using existing connection")
return g.db

在其他函数中我这样使用它:

(...)
cnx = get_db()
cursor = cnx.cursor()
(...)

第一个使用数据库的函数工作正常。然后,当另一个尝试连接 cursor 时,由于 cnx 没有连接而失败:

引发错误。OperationalError("MySQL 连接不可用。")

有人有办法解决这个问题吗?

一种解决方案是为每个函数再次创建连接,但为了性能,我宁愿在可能的情况下重用连接。

最佳答案

我目前最终得到的解决方案涉及每次方法需要数据库连接时重新连接

我不知道这是否会产生 connect() 的开销,但它适合当前的用例。

代码如下所示:

def get_db():
if 'db' not in g:
try:
cnx = mysql.connector.connect(user='tom', password='jerry',
host='127.0.0.1',
database=DB_NAME)
g.db = cnx
click.echo("Returns new connection")
return g.db
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
click.echo("Connection failed! Check username and password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
click.echo("Database does not exist")
else:
click.echo("Unknown error: {} ".format(err))

cnx = g.db
cnx.reconnect() <--- Doing a reconnect each time
return cnx

关于mysql.connector.connect 似乎没有通过函数实现持久连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com