【问题标题】:sqlalchemy no such table: usersqlalchemy 没有这样的表:用户
【发布时间】:2021-01-21 19:34:05
【问题描述】:

我已经设置了一个烧瓶站点,并且正在尝试使注册页面正常工作。页面本身呈现,但是当我在表单中输入信息并提交时,我得到一个sqlalchemy.exc.OperationalError。在这里的任何帮助将不胜感激!

这是我的注册功能:

@auth.route('/signup', methods=['POST'])
def signup_post():
    email = request.form.get('email')
    name = request.form.get('name')
    password = request.form.get('password')

    user = User.query.filter_by(email=email).first()  # if this returns a user,
    # then the email already exists in database

    if user:  # if a user is found, we want to redirect back to signup page so user can try again
        flash('email address already exists')
        return redirect(url_for('auth.signup'))

    # create a new user with the form data. Hash the password so the plaintext version isn't saved.
    new_user = user(email=email, name=name, password=generate_password_hash(password, method='sha256'))

    # add the new user to the database
    db.session.add(new_user)
    db.session.commit()

    return redirect(url_for('auth.login'))

具体的错误是no such table: user then:

[SQL: SELECT user.id AS user_id, user.email AS user_email, user.password AS user_password, user.name AS user_name 
FROM user 
WHERE user.email = ?
 LIMIT ? OFFSET ?]
[parameters: ('', 1, 0)]
(Background on this error at: http://sqlalche.me/e/13/e3q8)

这里是我初始化数据库并创建应用程序的地方:

db = SQLAlchemy()


def create_app():

    app = Flask(__name__)

    app.config['SECRET_KEY'] = 'UMGC-SDEV300-Key'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'

    db.init_app(app)

    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    from .models import User

    @login_manager.user_loader
    def load_user(user_id):
        # since the user_id is just the primary key of our user table, use it in the query for the user
        return User.query.get(int(user_id))

    # blueprint for auth routes in our app
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    # blueprint for non-auth parts of app
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app

【问题讨论】:

  • 看看你发布的错误来自user = User.query.filter_by 行。您是否运行过db.create_all() 或者您是否有任何用于 SQLAlchemy 迁移的系统?

标签: python sqlite flask


【解决方案1】:

检查 models.py 并添加以下行:tablename = 'user'

class User(UserMixin, db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)  # primary keys are required by SQLAlchemy
    firstname = db.Column(db.String(30))
    lastname = db.Column(db.String(30))
    email = db.Column(db.String(100), uni

并在 init.py 中更改为

@login_manager.user_loader
    def load_user(user_id):
        return User.query.filter_by(id=user_id).first()

并确保文件退出,并有表:用户

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'

【讨论】:

  • 不幸的是同样的问题。
【解决方案2】:

我想通了。我只需要创建数据库。当我第一次创建应用程序时,我经历过这一步,但我想我错过了一些东西。我删除了数据库并使用下面的命令创建了一个新数据库,然后就成功了。

from project import db, create_app
db.create_all(app=create_app())

这是通过 Python REPL 完成的。

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2015-07-30
    • 2020-03-01
    • 1970-01-01
    • 2013-07-12
    • 2021-11-02
    相关资源
    最近更新 更多