我正在尝试将我的 FLASK 应用程序与 localhost(127.0.0.1:5000) 上的 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客户端
- SQLalchemy
是的,mysqlclient 也已经安装了。
最佳答案
以下是您可以尝试的一些故障排除(这些是独立的步骤:因此尝试(1),检查它是否有效,尝试(2),检查它是否有效等等......) -
- 尝试
localhost
而不是127.0.0.1
(就是这样!) - 在 mysql/my.cnf 中设置
bind-address = 0.0.0.0
。然后它基本上监听所有地址(但仍然是一个端口)。
不要忘记重新启动服务器:systemctl restart mysql
- 数据库目录读写权限。只需确保您的应用程序能够读写数据库位置上的文件。尝试使用
chmod 777
进行测试。
请告诉我这些是否有效。如果没有,请发布错误,我们可以尝试一些操作。
注意:这是数据库级别的问题,而不是Python问题。检查this mysql
论坛主题以获取更多线索。
关于python - Flask 返回错误 : Lost connection to MySQL server, 系统错误:60,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971396/