SQLAlchemy:唯一性约束失败错误,但未设置唯一性约束。

4
我正在使用Flask和SQLAlchemy与SQLite创建一个应用程序,用于跟踪您的食品储藏室中的物品以及您喜欢制作的食谱。
我被卡住了。 我有一个表格,其中记录可以具有重复字段。 每次我尝试在我的应用程序中为此表进行数据库条目时,都会引发“IntegrityError:UNIQUE约束失败”。 这很令人困惑,因为触发错误的列没有明确设置唯一约束。
这是我正在插入的表的模型:
class PantryItem(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    amount = db.Column(db.String(12))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<PantryItem %r> % self.name'

以下是应添加到数据库的条目的视图代码:

@app.route('/pantry', methods=['GET', 'POST'])
@login_required
def pantry():

    form = IngredientForm() 
    pantry = PantryItem.query.filter_by(owner=g.user).all()

    if form.validate_on_submit():

        pantry_item = PantryItem(name=form.name.data, amount=form.amount.data, owner=g.user)
        db.session.add(pantry_item)
        db.session.commit()

        flash('You added %s to the pantry.' % pantry_item.name)
        return redirect(url_for('pantry'))

    return render_template('pantry.html', 
               form=form,
               user=g.user,
               pantry=pantry)

这是我在提交表单时收到的错误:

IntegrityError: (IntegrityError) UNIQUE constraint failed: pantry_item.name u'INSERT INTO pantry_item (name, amount, user_id) VALUES (?,  ?, ?)' (u'Milk', u'2 cups', 1)
表中已经存在一个名称为“牛奶”的PantryItem记录。
我是否错误地认为PantryItem的主键“id”将区分具有相同名称/数量/所有者的记录?还是我完全忽略了什么?
提前感谢您的帮助。

2
那个完整性错误来自数据库。 数据库中的表是否对名称具有唯一约束条件? - Eric Workman
是的,数据库中的表似乎已经设置了唯一约束。我曾经在Python类模型中设置了唯一约束,但后来进行了更改。我假设我的数据库迁移脚本会更新我的架构,但显然没有。我的问题通过删除所有旧的数据库记录并输入新记录来解决。 - Paul Morris
2个回答

6

删除您的表或删除数据库并重新初始化。每次更改模式时,您都必须删除表并重新初始化,而不仅仅是更新。


-1

我遇到了同样的问题,我设置了 app.run(debug=False) ,错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接