【发布时间】:2018-10-29 14:16:16
【问题描述】:
我在使用 Flask-Migrate 升级/降级数据库时遇到问题。有两个表,User 和 Post,由以下类定义:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
posts = db.relationship('Post', backref='author', lazy='dynamic')
def __repr__(self):
return '<User {}>'.format(self.username)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
我在这些表中添加了一些条目。
现在的问题。 :)
为了好玩,我通过:dummy = db.Column(db.String(20)) 在User 表中添加了一个列。修改表架构后,我运行了以下命令:
-
flask db migrate----成功 -
flask db upgrade----成功
然后我想回去:
- 为了将数据库恢复到以前的状态,我运行了
flask db downgrade---- 失败,错误为:sqlite3.OperationalError: near "DROP": syntax error - 我尝试通过从
User类中删除dummy = db.Column(db.String(20))语句来修复错误,然后再次运行flask db downgrade---- 再次失败并出现同样的错误。 - 然后我认为可能 Flask-Migrate 需要注意删除,所以我运行了
flask db migrate----成功 - 尝试
flask db upgrade----再次失败,出现同样的错误。
那么烧瓶迁移是如何工作的?具体来说,如何将数据库恢复到初始状态(没有dummy 属性)?
谢谢!
【问题讨论】:
标签: flask flask-migrate