【发布时间】:2017-08-26 01:25:32
【问题描述】:
所以我收到一个错误,即没有唯一约束与我的一张表的给定键匹配。我有两个表:用户和项目,其中我们有一个多对一的关系(一个用户的许多项目)。我正在使用 Flask-SQLAlchemy 来完成所有这些工作:
class ItemModel(db.Model):
__tablename__ = 'items'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(40))
description = db.Column(db.String(80))
price = db.Column(db.Float(precision=2))
emailAddress = db.Column(db.String(40), db.ForeignKey('users.email'))
class UserModel(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer)
email = db.Column(db.String(40), primary_key=True)
name = db.Column(db.String(40))
last_name = db.Column(db.String(40))
items = db.relationship('ItemModel', lazy="dynamic")
要创建表格,我的“app.py”中有以下语句:
@app.before_first_request
def create_database():
print("Creating tables.")
db.create_all()
错误是:没有唯一约束匹配引用表用户的给定键。
我不确定我哪里出错了,因为我在 ItemModel 中有一个与 UserModel 中的主键匹配的外键。欢迎任何建议/提示!
谢谢。
【问题讨论】:
-
你能修正最后一个代码
create_database()的缩进吗?还是在你的代码中是这样的? -
对不起,我的意思是将'def'缩进一个标签。我修好了它。我注意到的一件有趣的事情是,当我删除了“UserModel”中的“电子邮件”之外的所有内容时。它工作得很好,所以我正在尝试解决这个问题。
-
不使用 Flask-SQLAlchemy,但在 SQL 中,您必须先创建表
users- 然后才能创建另一个具有引用它的 FK 约束的表。 -
@ErwinBrandstetter 是的,这实际上是一个问题 - 我添加了外键关系,但是通过 Heroku 运行它(它没有设置这些关系)所以一旦我设置了这些关系并销毁了表,一切开始工作。感谢您的帮助!
标签: python sql postgresql flask-sqlalchemy