繁体   English   中英

Flask返回错误:断开与MySQL服务器的连接,系统错误:60

[英]Flask returns error: Lost connection to MySQL server, system error: 60

我正在尝试在本地主机(127.0.0.1:5000)上将我的FLASK应用程序与MySQL连接起来,但出现以下错误。

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”库。 当我尝试填写表格并点击提交时。 它尝试连接到数据库,但从未成功,并返回错误。

请查看我的代码和帮助。

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的
  • mysql客户端
  • SQL炼金术

是的,mysqlclient也已经安装。

以下是一些您可以尝试解决的问题(这些是独立的步骤:因此,请尝试(1),检查其是否有效,再尝试(2),检查其是否有效,等等...)-

  1. 尝试使用localhost而不是127.0.0.1 (就这样!)
  2. 在mysql / my.cnf中设置bind-address = 0.0.0.0 然后,它基本上侦听所有地址(但仍然侦听一个端口)。

并且不要忘记重启服务器: systemctl restart mysql

  1. 数据库目录的读写权限。 只要确保您的应用程序能够在数据库位置上读取文件。 尝试使用chmod 777进行测试。

让我知道其中任何一项是否有效。 如果不是,请发布错误,我们可以尝试一些方法。

注意 :这是数据库级别的问题,而不是python问题。 检查 mysql论坛线程以获取更多线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM