Операционная ошибка SQLAlchemy: нет такого столбца таблицы user_id при попытке создать новую строку БД - PullRequest
0 голосов
/ 15 февраля 2019

Я получаю приведенную ниже ошибку при попытке добавить ингредиент на страницу своей учетной записи (которая включает только форму 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 голосов
/ 16 февраля 2019

У меня были старые данные Pycache.После того как я удалил эту папку, удалил свои таблицы и создал их заново, проблема была решена.

...