python - MySQLdb._exceptions.OperationalError ('1046, No database selected' ) - Flask 到 mySQL 连接错误

标签 python mysql flask flask-mysql

我花了很多时间试图解决这个问题,但我迷失了。

我正在尝试制作一个小型网络应用程序,正在观看一些教程......

I keep getting this error: MySQLdb._exceptions.OperationalError ('1046, No database selected')

这是我的代码:

# app.py
from flask import Flask, render_template, flash, redirect, url_for, session, logging, request
# from flask_sqlalchemy import SQLAlchemy
# from data import Articles
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__)
# app.config['SECRET_KEY'] = 'xxxxxxxxxx'

    # Config MySQL
    app.config['MySQL_HOST'] = 'localhost'
    app.config['MySQL_USER'] = 'root'
    app.config['MySQL_PASSWORD'] = ''
    app.config['MySQL_DB'] = 'myflaskapp'
    app.config['MySQL_CURSORCLASS'] = 'DictCursor'
    # Init MySQL

    mysql = MySQL(app)

    # Setting articles
    Articles = Articles()


    @app.route('/')
    def home():
        return render_template('home.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)


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='Passwords do not match!')


                                      ])
confirm = PasswordField('Confirm Password')


@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))

        # Creat Cursor
        cur = mysql.connection.cursor()
        # Execute Query
        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 connection
        cur.close()

        # Message to user once registered
        flash('You are now registered and can login, thank you', 'success')
        return redirect(url_for('index'))
    return render_template('register.html', form=form)


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

如果我评论 MYSQL 配置内容,我不会收到密码拒绝错误,所以我很困惑,我在 MYSQL 安装过程中搞砸了吗?

此外,我已经使用 show database 检查了我的数据库是否存在;我已经访问了 myflaskapp 中的用户表,并且还通过 phpmyadmin 进行了检查。

最佳答案

我解决了我自己的问题。

1) app.config['MySQL_HOST'] = 'localhost' --> MySQL需要替换为'MYSQL'

  • return redirect(url_for('index')) --> index 需要替换为 'register'
  • 简单的拼写错误...

    关于python - MySQLdb._exceptions.OperationalError ('1046, No database selected' ) - Flask 到 mySQL 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54915276/

    相关文章:

    python - Pymongo异常处理,无法解决pymongo中的错误

    python - 如何使用networkX在有向加权图中检测社区?

    mysql - 从 mysql workbench 6.3 中创建的表中删除 COMMENT ''

    mysql - 如何估计SQL查询时间?

    python - 为什么在 Python 中对该项目使用装饰器时 Flask 的 url_for 会抛出错误?

    python - 找不到 flask 模板

    python - 如何在 Flask 中为动态生成的 jinja2 模板注册过滤器?

    MYSQL:连接表性能缓慢

    python - flask_socketio已连接到客户端,但未接收消息

    python - 改变 pandas 数据框的结构