У меня небольшая проблема при использовании mysql в python с фреймворком Flask.Я настроил функцию (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
В других функциях Iиспользуйте это так:
(...)
cnx = get_db()
cursor = cnx.cursor()
(...)
Первая функция, которая использует базу данных, работает нормально.Затем, когда другой пытается подключиться к ошибкам cursor
, поскольку cnx
не имеет подключения:
raise errors.OperationalError("MySQL Connection not available.")
У кого-нибудь есть способ справиться с этим?
Одно из решений состоит в том, чтобы заново создать соединение для каждой функции, но для повышения производительности я предпочитаю повторно использовать соединение, если это возможно.