mysql.connector.errors.ProgrammingError: 1226 (42000): Пользователь [имя пользователя] превысил ресурс «max_user_connections» (текущее значение: 10)
Но я еще даже не пытался установить какие-либо связи. Мне очень хочется это исправить, так как я включу это приложение в свой порт.
Поскольку произошла эта ошибка, я попробовал добавить в свой код блоки try/Exception/else/finally для уничтожения соединений, но это по-прежнему не работает.
Вот пример кода, включая настройку моей базы данных:
Код: Выделить всё
from flask import Flask, redirect, render_template, request, session
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.security import check_password_hash, generate_password_hash
from helpers import login_required, check_available_chars
import mysql.connector.pooling
app = Flask(__name__)
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config["SESSION_FILE_DIR"] = mkdtemp()
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.secret_key = [secret key]
app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
cnxpool = mysql.connector.pooling.MySQLConnectionPool(
pool_name="name",
pool_size=10,
autocommit=True,
user=[user name],
password=[password],
host=[host],
database=[database]
)
@app.route("/login", methods=["GET", "POST"])
def login():
"""Log user in"""
# Forget any user_id
session.clear()
# User reached route via POST (as by submitting a form via POST)
if request.method == "POST":
# Ensure username was submitted
if not request.form.get("businessName"):
return render_template("login.html", errorMessage = "must provide business name")
# apostrophes and semicolons not allowed in username, to avoid SQL conflicts
if ';' in request.form.get("businessName") or '\'' in request.form.get("businessName"):
return render_template("login.html", businessName=request.form.get("businessName"), errorMessage = "Invalid business name")
# Ensure password was submitted
elif not request.form.get("password"):
return render_template("login.html", businessName=request.form.get("businessName"), errorMessage = "must provide password")
try:
conn = cnxpool.get_connection()
cur = conn.cursor(dictionary=True)
cur.execute("SELECT * FROM businesses WHERE name = %s", (request.form.get("businessName"),))
rows = cur.fetchall()
except mysql.connector.Error as sqlerr:
print(sqlerr)
except Exception as err:
print(err)
else:
# Ensure username exists and password is correct
if len(rows) != 1 or not check_password_hash(rows[0]['password'], request.form.get("password")):
cur.close()
conn.close()
return render_template("login.html", businessName=request.form.get("businessName"), errorMessage = "Invalid business name and/or password")
else:
# Remember which user has logged in (if in login page)
session["user_id"] = rows[0]['businessID']
# Redirect user to message entry page
cur.close()
conn.close()
return redirect("/")
finally:
if (cur):
cur.close()
if (conn):
conn.close()
# User reached route via GET (as by clicking a link or via redirect)
else:
return render_template("login.html")
- Увеличение «размера пула» до размера более 10
- Используя MySQL Workbench, щелкнув мою базу данных (это работает) и запросив «SHOW PROCESSLIST» и «KILL [id]»
- Перезапуск всех динамиков на панели инструментов Heroku
- Выполнение команды «heroku restart --app [appname]» в коде Visual Studio