所以我得到一个错误,没有唯一约束匹配我的一个表的给定键。我有两个表:用户和项目,我们有多对一的关系(一个用户的许多项目)。我正在使用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中的主键匹配的外键。欢迎任何建议/提示!
感谢。
答案 0 :(得分:0)
我实际上已经开始工作了 - 正如上面提到的Erwin Brandstetter,出现错误是因为您需要先创建用户表。就我而言,我需要根据Postgres本身的外键/主键关系更新用户表。
答案 1 :(得分:0)
为使某人最终到这里,但他们以不同的方式构造代码,例如说每个实体都在其自己的文件中,请在调用.create_all()
方法之前检查您的导入顺序。
答案 2 :(得分:0)
这是我想解决您遇到的餐桌订购问题的方式:
table_names = ['users',
'items']
for table in table_names:
t = db.Model.metadata.tables[table]
t.create(bind=engine)