尝试注册时在烧瓶中出现sqlalchemy.exc.OperationalError

时间:2020-11-12 05:22:07

标签: python flask sqlalchemy

我正在关注miguel grinberg的烧瓶超级教程。但是,在完成对注册,登录名和用户配置文件的编码后,当我尝试对其进行测试时,尝试注册时出现错误:

sqlalchemy.exc.OperationalError
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: user.about_me
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password_hash AS user_password_hash, user.about_me AS user_about_me, user.last_seen AS user_last_seen 
FROM user 
WHERE user.username = ?
 LIMIT ? OFFSET ?]
[parameters: ('samyak', 1, 0)]
(Background on this error at: http://sqlalche.me/e/13/e3q8)

这是我的register.html模板:

{% extends "base.html" %}

{% block content %}
    <h1>Register</h1>
    <form action="" method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}<br>
            {% for error in form.username.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>
            {{ form.email.label }}<br>
            {{ form.email(size=64) }}<br>
            {% for error in form.email.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}<br>
            {% for error in form.password.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>
            {{ form.password2.label }}<br>
            {{ form.password2(size=32) }}<br>
            {% for error in form.password2.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

这是我的register函数:

@app.route('/register', methods=['GET', 'POST'])
def register():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, email=form.email.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        flash('Congratulations, you are now a registered user!')
        return redirect(url_for('login'))
    return render_template('register.html', title='Register', form=form)

而且,因为这是一个sqlalchemy错误,所以这是我的User模型:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def avatar(self, size):
        digest = md5(self.email.lower().encode('utf-8')).hexdigest()
        return 'https://www.gravatar.com/avatar/{}?d=identicon&s={}'.format(
            digest, size)

我刚刚开始学习烧瓶。有人可以帮我吗?

编辑: 我解决了这个问题。

  1. 首先,我删除了数据库文件和迁移文件夹。

  2. 然后,我用flask db init重新初始化数据库。

  3. 然后,我运行了以下命令:

    烧瓶db migration -m“数据库”

    烧瓶数据库升级

然后,当我运行该应用程序时,一切正常。

1 个答案:

答案 0 :(得分:1)

根据我的经验有限,您正在积极使用的数据库现在不同于您之前创建的数据库。如果可以的话,出于学习目的,请删除数据库文件并重新运行。