Flask возвращает ошибку: потеря соединения с сервером MySQL, системная ошибка: 60

0

Я пытаюсь подключить свое приложение FLASK с MySQL на localhost (127.0.0.1:5000), но становится ниже ошибки.

super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'waiting for initial communication packet', system error: 60")

Я использую библиотеку flask_mysqldb. Когда я попытался заполнить форму и нажать submit. он пытается подключиться к db, но никогда не получал успеха и не возвращал ошибку.

Пожалуйста, ознакомьтесь с моим кодом и помощью.

from flask import Flask, render_template, flash, redirect, url_for, request, session, logging
from data import Articles
from flask_mysqldb import MySQL 
from wtforms import Form, StringField, TextAreaField, PasswordField, validators
from passlib.hash import sha256_crypt


app = Flask("__name__")

# config MySQL
app.config["MYSQL_HOST"] = "127.0.0.1"
app.config["MYSQL_PORT"] = 5000
app.config["MYSQL_USER"] = "root"
app.config["MYSQL_DB"] = "myflaskapp"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

# init MySQL
mysql = MySQL(app)



Articles = Articles()


@app.route("/")
def index():
    return render_template("index.html")

@app.route("/about")
def about():
    return render_template("about.html")

@app.route("/articles")
def articles():
    return render_template("articles.html", articles = Articles)

@app.route("/article/<string:id>/")
def article(id):
    return render_template("article.html", id=id)

# collect and validate user data
class RegisterForm(Form):
    name        = StringField('Name', [validators.Length(min=1, max=50)])
    username    = StringField('Username', [validators.Length(min=4, max=25)])
    email       = StringField('Email', [validators.Length(min=6, max=50)])
    password    = PasswordField('Password', [
            validators.DataRequired(),
            validators.EqualTo('confirm', message='Password do not match')
        ])
    confirm     = PasswordField('Confirm Password')

# insert user data to DB
@app.route("/register", methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)

    if request.method == 'POST' and form.validate():
        name        = form.name.data
        email       = form.email.data
        username    = form.username.data
        password    = sha256_crypt.encrypt(str(form.password.data))

        # create cursor(handler) to connect DB
        cur = mysql.connection.cursor()

        cur.execute("INSERT INTO users(name, email, username, password) VALUES (%s, %s, %s, %s)", (name, email, username, password))

        # commit to db
        mysql.connection.commit()

        # close the connection
        cur.close()

        flash('You are now Registered', 'success')

        return redirect(url_for('index'))

    return render_template('register.html', form=form)



if __name__ == "__main__":
    app.run(debug=True)

Ниже приведены версии, которые я использую.

  • Python: 3.6
  • MySQL: 5.7.21

В: Поддерживается ли "flask_mysqldb" python 3.6 или нет?

В: Какая хорошая альтернатива, если потребуется?

  • PyMySQL
  • mysqlclient
  • SQLAlchemy

И да, mysqlclient также уже установлен.

Теги:
flask

1 ответ

0
Лучший ответ

Вот некоторые из этих способов устранения неполадок, которые вы можете попробовать (это независимые шаги: Попробуйте (1), проверьте, работает ли он, попробуйте (2), проверьте, работает ли он и т.д.) -

  1. Попробуйте localhost вместо 127.0.0.1 (вот оно!)
  2. Установка bind-address = 0.0.0.0 в mysql/my.cnf. В основном он прослушивает все адреса (но еще один порт).

И не забудьте перезагрузить сервер: systemctl restart mysql

  1. Разрешение на чтение и запись в каталоге базы данных. Просто убедитесь, что ваше приложение может rw файлы в местоположении db. Попробуйте chmod 777 для тестирования.

Дайте мне знать, если это работает. Если это не так, отправьте сообщение об ошибке, и мы можем что-то попробовать.

Примечание. Это проблема уровня базы данных, а не проблема с python. Проверьте этот mysql форума mysql для получения дополнительных сведений.

  • 1
    Ааа ,,, Спасибо @Vivek решение 1 работает успешно. Весь день я застрял в этой точке.
  • 0
    Я не изменил другой вариант, и мое приложение работает нормально. Пожалуйста, скажите мне, что я должен изменить эти параметры или просто оставить все как есть для дальнейшей работы ???
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню