Flask应用遇RuntimeError求助:SQLAlchemy配置问题排查
Flask RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set. 问题解决
错误原因
你在初始化SQLAlchemy(app)对象之后,才设置app.config['SQLALCHEMY_DATABASE_URI']配置项。SQLAlchemy在初始化时会立即读取Flask app的数据库配置,此时配置还未设置,因此触发该RuntimeError。
解决方法
调整代码顺序,先完成Flask app的所有配置(包括数据库URI、SECRET_KEY等),再初始化SQLAlchemy对象。
修正后的完整代码
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参数 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' app.config['SECRET_KEY'] = 'thisisasecretkey' # 再初始化SQLAlchemy 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__": # 可选:如果需要自动创建数据库表,添加以下代码 with app.app_context(): db.create_all() app.run(debug=True)
内容的提问来源于stack exchange,提问作者estakkk
相关产品推荐
相关产品推荐

