如果我使用外键添加模型,那么flask-migrate不起作用

时间:2014-08-25 13:52:19

标签: python flask flask-sqlalchemy flask-migrate

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True)
    # 是不是应该加密下,不能明文存储?应该设置多长的空间? 14.7.18 4:22 by lee
    password = db.Column(db.String(100))
    nickname = db.Column(db.String(64))
    school = db.Column(db.String(20))
    sex = db.Column(db.String(5))
    status = db.Column(db.String(10))
    grade = db.Column(db.String(18))

我有一个数据库。然后我将模型添加到models.py:

class PubSquare(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', backref=db.backref('publish'))

    subject = db.Column(db.String(100))
    timestamp = db.Column(db.DateTime, default=datetime.datetime.now)

然后我运行迁移脚本,它调用bug:

NoReferencedTableError: Foreign key associated with column 'pub_square.author_id' could not find table 'user' with which to generate a foreign key to target column 'id'

由于这次,我可以成功运行迁移脚本几次。但这次,当它引用外键关系时,它不起作用。

证明我的模型代码是对的,我重新创建数据库,它的工作原理。 所以,这是烧瓶 - 迁移对这个bug的调用。

2 个答案:

答案 0 :(得分:0)

从我可以看到,user表未被创建(could not find table 'user' with which to generate a foreign key to target column 'id')。首先尝试迁移User,然后创建user表,然后执行PubSquare

编辑:您是否尝试过阅读文档? http://sqlalchemy-migrate.readthedocs.org/en/v0.7.1/changeset.html#constraint似乎有所帮助。

答案 1 :(得分:0)

@knight我们已经多次迁移。'user'表在数据库中。但我发现如果我 像

这样的代码
author_id = db.Column(db.Integer)

并迁移,这没什么不对。然后添加像

这样的代码
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

再次迁移,它通过了。真奇怪。我不知道为什么。

我们的迁移代码是

api.update_db_from_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, db.metadata)