代码之家  ›  专栏  ›  技术社区  ›  estakkk

在Flask应用程序中遇到RuntimeError

  •  0
  • estakkk  · 技术社区  · 1 年前

    我在Flask应用程序中遇到RuntimeError,我正在寻求帮助以解决此问题。我的Python文件名为“auth.py”,附近有一个“database.db”文件。

    以下是我面临的错误信息:

    File "<stdin>", line 1, in <module>
    File "path\to\auth.py", line 10, in <module>
    db = SQLAlchemy(app)
    ...
    RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.
    
    from flask import Flask, render_template, url_for, redirect
    from flask_sqlalchemy import SQLAlchemy
    from flask_login import UserMixin, login_user, LoginManager, login_required, logout_user, current_user
    from flask_wtf import FlaskForm
    from wtforms import StringField, PasswordField, SubmitField
    from wtforms.validators import InputRequired, Length, ValidationError
    from flask_bcrypt import Bcrypt
    
    app = Flask(__name__)
    db = SQLAlchemy(app)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
    app.config['SECRET_KEY'] = 'thisisasecretkey'
    
    
    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)    
        username = db.Column(db.String(20), nullable=False, unique=True)
        password = db.Column(db.String(80), nullable=False)
    
    
    
    @app.route('/')
    def home():
        return render_template('base.html')
    
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        return render_template('login.html')
    
    
    
    @ app.route('/register', methods=['GET', 'POST'])
    def register():
        return render_template('register.html')
    
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    我已确认“database.db”文件与“auth.py”位于同一目录中。是什么原因导致了此RuntimeError,我该如何解决?

    如有任何帮助或指导,我们将不胜感激。

    非常感谢。

    2 回复  |  直到 1 年前
        1
  •  1
  •   zjalicf    1 年前

    您应该添加

    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
    app.config['SECRET_KEY'] = 'thisisasecretkey'
    

    之前 db = SQLAlchemy(app) .

        2
  •  1
  •   sai praveen    1 年前

    在设置db_PARAMS之前,不应该启动数据库,例如 SQLALCHEMY_DATABASE_URI 。这是因为 SQLAlchemy(app) 加载所有配置变量。

    在您的情况下,您正在初始化 db = SQLAlchemy(app) 尝试加载 SQLALCHEMY_DATABASE_URI (尚未设置),所以您看到了错误。

    更新代码:

    from flask import Flask, render_template, url_for, redirect
    from flask_sqlalchemy import SQLAlchemy
    from flask_login import UserMixin, login_user, LoginManager, login_required, logout_user, current_user
    from flask_wtf import FlaskForm
    from wtforms import StringField, PasswordField, SubmitField
    from wtforms.validators import InputRequired, Length, ValidationError
    from flask_bcrypt import Bcrypt
    
    app = Flask(__name__)
    
    app.config['SECRET_KEY'] = 'thisisasecretkey' # also move secret key to top. 
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
    
    # move here
    db = SQLAlchemy(app)
    
    
    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)    
        username = db.Column(db.String(20), nullable=False, unique=True)
        password = db.Column(db.String(80), nullable=False)
    
    
    
    @app.route('/')
    def home():
        return render_template('base.html')
    
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        return render_template('login.html')
    
    
    
    @ app.route('/register', methods=['GET', 'POST'])
    def register():
        return render_template('register.html')
    
    
    if __name__ == "__main__":
        app.run(debug=True)