【问题标题】:SQLAlchemy and flask (sqlalchemy.exc.OperationalError:)SQLAlchemy 和烧瓶 (sqlalchemy.exc.OperationalError:)
【发布时间】:2020-05-31 02:12:21
【问题描述】:

我收到了这条消息:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
[SQL: INSERT INTO user (username, email, password) VALUES (?, ?, ?)]
[parameters: ('test', 'test@test.com', 'password')]
(Background on this error at: http://sqlalche.me/e/e3q8)

当我尝试时:db.session.commit()。我正在学习教程并尝试个性化代码,但结果不佳。

到目前为止我所做的是:

>>> from lagerut import db
>>> db.create_all()
>>> from models import User
>>> user_1 = User(username='test', email='test@test.com', password='password')
>>> db.session.add(user_1)
>>> db.session.commit()

这里是lagerut.py

from datetime import datetime
from flask import Flask, render_template, url_for, flash, redirect
from flask_sqlalchemy import SQLAlchemy
from form import RegistrationForm, LoginForm


app = Flask(__name__)
app.config['SECRET_KEY'] = '2a1de6eea4126191912d6e702c6aa8f9'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///lagerut.db'
db = SQLAlchemy(app)

@app.route('/')
@app.route('/home')
def home():
    return render_template ('home.html')

@app.route('/how-it-works')
def howitworks():
    return render_template ('how-it-works.html', title='How it works')

@app.route('/lager-out')
def lagerout():
    return render_template ('lager-out.html', title='Lager out')

@app.route('/lager-in')
def lagerin():
    return render_template ('lager-in.html', title='Lager in')

@app.route("/register", methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('home'))
    return render_template('register.html', title='Register', form=form)

@app.route("/login", methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        if form.email.data == 'admin@blog.com' and form.password.data == 'password':
            flash('You have been logged in!', 'success')
            return redirect(url_for('home'))
        else:
            flash('Login Unsuccessful. Please check username and password', 'danger')
    return render_template('login.html', title='Login', form=form)


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

这里是models.py

from datetime import datetime
from lagerut import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

class Items(db.Model):
    item_number = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(200), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    department = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)

    def __repr__(self):
        return f"Items('{self.product}', '{self.date_posted}', '{self.content}', '{self.department}', '{self.content}')"

我应该尝试重新编写代码吗?我只是想学习如何为我的工作构建一个小应用程序。

学习编程的好方法是否也适用于 shell?

【问题讨论】:

    标签: python database flask sqlalchemy


    【解决方案1】:

    这是因为您在创建数据库时没有创建应用程序上下文,因为您是通过 python shell 执行此操作的,因此您需要添加以下行

    with app.app_context():
    

    在此处了解更多信息https://flask.palletsprojects.com/en/1.0.x/appcontext/

    【讨论】:

    • 这应该在 db.createall() 之前添加您还必须从文件中导入应用程序。
    • 不幸的是我仍然有同样的问题:(。无论如何感谢您的帮助。
    猜你喜欢
    • 2021-01-24
    • 2012-12-29
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多