2021年3月5日星期五

Why I am getting sqlalchemy.exc.OperationalError even not changing anything?

I read in the docs that the database connection being dropped, or not being able to connect to the database. How can I connect it again. Is there some function in flask that prevent this error?

routes.py:

from flask import render_template, redirect, url_for, flash, request  from main import app, db, bcrypt  from main.forms import RegistrationForm, LoginForm  from main.models import User, Budgets, Expenses  from flask_login import login_user, current_user, logout_user, login_required      @app.route("/", methods=['GET', 'POST'])  @app.route("/home", methods=['GET', 'POST'])  def home():      if current_user.is_authenticated:          return redirect(url_for('user'))      form = LoginForm()      if form.validate_on_submit():          user = User.query.filter_by(username=form.username.data).first()          if user and bcrypt.check_password_hash(user.password, form.password.data):              login_user(user, remember=form.remember.data)              next_page = request.args.get('next')              return redirect(next_page) if next_page else redirect(url_for('user'))          else:              flash("Login Unsuccessful. Please check username and password", "danger")      return render_template("home.html", title='home', form=form)    @app.route("/about")  def about():      return render_template("about.html", title='About')    @app.route("/user", methods=['GET', 'POST'])  @login_required  def user():      budgets = Budgets.query.all()      return render_template("user.html", title=current_user.username, budgets=budgets)    @app.route("/register", methods=['GET', 'POST'])  def register():      if current_user.is_authenticated:          return redirect(url_for('user'))      form = RegistrationForm()      if form.validate_on_submit():          hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')          user = User(username=form.username.data, email=form.email.data, password=hashed_password)          db.session.add(user)          db.session.commit()          flash(f"Your account has been created!", "success")          return redirect(url_for("home"))        return render_template("register.html", title='Register', form=form)    @app.route("/add_budgets", methods=['GET', 'POST'])  def add_budgets():      budget = request.form.get('budget')      user_budget = Budgets(budget=budget, budget_id=current_user.id)      db.session.add(user_budget)      db.session.commit()                return redirect(url_for('user'))    @app.route("/logout")  def logout():      logout_user()      return redirect(url_for('home'))  

models.py:

from datetime import datetime  from main import db, login_manager  from flask_login import UserMixin    @login_manager.user_loader  def load_user(user_id):      return User.query.get(int(user_id))    class User(db.Model, UserMixin):      id = db.Column(db.Integer, primary_key=True)      username = db.Column(db.String(20), unique=True, nullable=False)      email = db.Column(db.String(20), unique=True, nullable=False)      password = db.Column(db.String(20), nullable=False)      current_budget = db.relationship('Budgets', backref='user_budget', lazy=True)        def __repr__(self):          return f"User('{self.username}', '{self.email}')"    class Budgets(db.Model):      id = db.Column(db.Integer, primary_key=True)      budgets = db.Column(db.Integer, nullable=False)      date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)      budget_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)      expense = db.relationship('Expenses', backref='budget_expenses', lazy=True)        def __repr__(self):          return f"Budgets('{self.budget}')"    class Expenses(db.Model):      id = db.Column(db.Integer, primary_key=True)      categories = db.Column(db.String(20), nullable=False)      category_cost = db.Column(db.Integer, nullable=False)      category_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)      expense_id = db.Column(db.Integer, db.ForeignKey('budgets.id'), nullable=False)        def __repr__(self):          return f"Expenses('{self.categories}', '{self.category_cost}')"  

init.py:

from flask import Flask  from flask_sqlalchemy import SQLAlchemy  from flask_bcrypt import Bcrypt  from flask_login import LoginManager      app = Flask(__name__)  app.config['SECRET_KEY'] = '5523e24bd0fb45b90a9af1deb8bc5421'  app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'  db = SQLAlchemy(app)  bcrypt = Bcrypt(app)  login_manager = LoginManager(app)  login_manager.login_view = 'home'  login_manager.login_message_category = 'info'      from main import routes  

I tried to drop all the data in my database but nothing happens. This is the error I get: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user [SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password AS user_password FROM user WHERE user.id = ?] [parameters: (2,)]

https://stackoverflow.com/questions/66501979/why-i-am-getting-sqlalchemy-exc-operationalerror-even-not-changing-anything March 06, 2021 at 11:08AM

没有评论:

发表评论