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,)]
没有评论:
发表评论