【问题标题】:Update all records with flask migration script使用烧瓶迁移脚本更新所有记录
【发布时间】:2019-12-09 15:35:07
【问题描述】:

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

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

model.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')

migration.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()

【问题讨论】:

    标签: python flask-sqlalchemy flask-migrate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多