SQLAlchemy操作错误:尝试创建新的数据库行时,没有这样的表列user_id

时间:2019-02-15 20:49:12

标签: python sqlalchemy flask-sqlalchemy

尝试在我的“帐户”页面上添加成分时,出现以下错误(该页面仅包含AddToPantry形式-一个字段,即“成分名称”)。

sqlalchemy.exc.OperationalError
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table ingredient has no column named user_id [SQL: 'INSERT INTO ingredient (ingredient_name, user_id) VALUES (?, ?)'] [parameters: ('bread', 1)] (Background on this error at: http://sqlalche.me/e/e3q8)

这是我的模特:

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(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    recipes = db.relationship('Recipe', backref='user', lazy=True)
    pantry_items = db.relationship('Ingredient', backref='user', lazy=True)
    # meal_plans = db.relationship('Meal Plan', backref='user', lazy='dynamic')

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

class Recipe(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    spoonacular_id = db.Column(db.Integer)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Recipe('{self.spoonacular_id}')"

class Ingredient(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ingredient_name = db.Column(db.String(40), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Recipe('{self.ingredient_name}')"

这是我进入帐户页面的路线,这是表单的加载位置:

@app.route("/account", methods=['GET', 'POST'])
@login_required
def account():
    form = AddToPantry()
    if form.validate_on_submit():
        ingredient = Ingredient(ingredient_name=form.ingredient_name.data, user=current_user)
        db.session.add(ingredient)
        db.session.commit()
    return render_template('account.html', title='Account', form=form)

1 个答案:

答案 0 :(得分:0)

我有旧的pycache数据。删除此文件夹后,放下表格并重新创建它们即可解决问题。