【发布时间】:2015-09-12 14:22:21
【问题描述】:
我正在将 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)
表中已经有一条名为“Milk”的 PantryItem 记录。
假设 PantryItem 的主键“id”将一条记录与另一个具有相同名称/数量/所有者的记录区分开来,我是否不正确?还是我只是完全忽略了某些东西?
提前感谢您的帮助。
【问题讨论】:
-
完整性错误来自数据库。数据库中的表是否对名称有唯一性约束?
-
是的,看来数据库中的表确实有一个唯一的约束集。我曾经在我的 Python 类模型中设置了一个唯一的约束,但后来改变了它。我假设我的数据库迁移脚本会更新我的架构,但显然没有。通过删除所有旧数据库记录并输入新记录,我的问题得到了解决。
标签: python database sqlite sqlalchemy flask-sqlalchemy