繁体   English   中英

使用烧瓶迁移脚本更新所有记录

[英]Update all records with flask migration script

我正在 Flask 中使用 MySQL 数据库,我需要更新模型。 我已准备好迁移以创建新表列和使用当前主键更新新列的脚本。 然后使用新的主键重新插入该行。

有没有办法将重新分配脚本与migrate命令结合起来? 还是在模型更新后手动运行更好?

模型.py

class Outcome(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    outcome_id = db.Column(db.Integer) # the new property, should match id
    title = db.Column(db.String(64))
    course_id = db.Column(db.Integer)
    assignment_id = db.relationship('Assignment', uselist=False, back_populates='outcome')

迁移.py

from app import db
from app.models import Outcome
from sqlalchemy.orm.session import make_transient

outcomes = Outcome.query.all()

for outcome in outcomes:
    db.session.expunge(outcome) # use only the object
    make_transient(outcome)

    outcome.outcome_id = outcome.id #add the new column value
    outcome.id = None #set the ID to none to inherit a sequential ID 

    db.session.add(outcome)

db.session.commit()

这确实是一个偏好问题,它实际上取决于什么最适合您的工作流程。

您可以将其包含在 Flask-Migrate 迁移中,但请记住,在迁移脚本中使用模型通常不是一个好主意,因为您无法确保模型随着项目的发展而与迁移保持兼容。 如果您在迁移脚本中进行此更改,通常您会希望使用原始 SQL 语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM