SQLAlchemy OperationalError 没有这样的 table

SQLAlchemy OperationalError no such table

我正在创建一个 Flask 应用程序,并且我有一个包含用于注册新用户的表单的页面。但是当我输入一些数据时,我得到错误 sqlalchemy.exc.OperationalError: (OperationalError) no such table: user。在文件 config.py 我有这一行 SQLALCHEMY_DATABASE_URI = "sqlite:///example.sqlite" 这是我的其余代码:

flask_start.py

import os
from flask import Flask
from config import Config
from flask_utils import page_bp
from db_creation import db


def create_app():
    appname = "IOT - PROJECT NASTIS"
    app = Flask(appname)
    myconfig = Config
    app.config.from_object(myconfig)
    app.register_blueprint(page_bp, url_prefix='')
    db.init_app(app)
    return app


def setup_database(app):
    with app.app_context():
        db.create_all()


if __name__ == "__main__":
    app = create_app()
    if not os.path.isfile('/tmp/test.sqlite'):
        setup_database(app)
    port = 8000
    interface = '0.0.0.0'
    app.run(host=interface, port=port, debug=True)

db_creation.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

flask_utils.py

db_creation import db
from User import User

page_bp = Blueprint("page_bp", __name__)

@page_bp.route('/mainPage/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    sha256_crypt.encrypt(str(form.password.data)))
        db.session.add(user)
        db.session.commit()
        flash('Thanks for registering, you can now log in!!', 'success')
        return redirect(url_for('page_bp.register'))
    return render_template('register.html', form=form)

User.py

from db_creation import db


class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))

    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password

我做错了什么?搞不懂哪里错了

当您 运行 db.create_all() 它需要知道要创建哪些表 -- 它可以告诉它当前可以看到哪些模型。

User 没有导入到您的 start_flask.py 文件中——所以当 db.create_all() 是 运行 时,它几乎是‘嗯,我不知道任何模型,我想我只是创建一个没有表的空数据库'它不知道去查看其他文件,所以你只需要介绍它们:)

from User import User 添加到 start_flask.py 文件中的导入应该可以解决这个问题。

另外--您正在检查 /tmp/... 中的文件以触发您的 'no database file yet' 检查,但您的 SQLALCHEMY_DATABASE_URI 不匹配。