没有唯一约束匹配给定引用表的键#34;用户" (PostgreSQL的)

时间:2017-03-31 17:18:16

标签: python sql postgresql flask-sqlalchemy

所以我得到一个错误,没有唯一约束匹配我的一个表的给定键。我有两个表:用户和项目,我们有多对一的关系(一个用户的许多项目)。我正在使用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中的主键匹配的外键。欢迎任何建议/提示!

感谢。

3 个答案:

答案 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)