【问题标题】:How to rename a column in a table with Flask + SQLAlchemy如何使用 Flask + SQLAlchemy 重命名表中的列
【发布时间】:2022-09-28 00:11:26
【问题描述】:

我为我的卡车调度应用程序创建了两个表:

class appts_db(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    carrier = db.Column(db.String(100))
    material = db.Column(db.String(10))
    pickup_date = db.Column(db.String(10))

class carriers_db(db.Model):
    carrier_id = db.Column(db.Integer, primary_key=True)
    carrier = db.Column(db.String(100))
    phone_number = db.Column(db.String(15))

如何重命名列载体运营商名称在这两个表中,以使列包含的内容更加清晰。我尝试使用命令提示符

>python3
>db.create_all()

但列名不会更新。是否有一些我缺少的命令可以更新数据库中的列名?

    标签: python sqlalchemy


    【解决方案1】:

    (1.) 这似乎是一个关于“如何迁移单个表?”的问题,两次。也就是说,任何适用于appts_db 的答案也需要应用于carriers_db——我没有看到FK 关系,所以我认为大多数技术解决方案都需要手动告知第二次重命名。

    (2.) 有很多不错的“版本我的架构!”方法,包括通常的 ruby​​-on-rails 方法。在这里,我推荐alembic。这需要一些时间来适应,但一旦实施,它就可以让您及时前滚/回滚,并且表模式将与当前签出的源代码的期望相匹配。它特别擅长列重命名。

    (3.) 您可以在这里做的最简单的事情是一对 DROP TABLE,然后重新运行db.create_all()。现有表阻止 create_all 产生任何影响,但在 DROP 之后它会做你想要的。当然,如果你关心现有的行,你会想在你太冒险之前把它们藏起来。

    【讨论】:

      【解决方案2】:

      我最终使用了DB Browser for SQLite(我之前已经下载了它)并在“执行 SQL”选项卡中运行了这段代码:

      ALTER TABLE carriers_db
      RENAME COLUMN carrier TO carrier_name;
      

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 2020-09-19
        • 1970-01-01
        • 2020-07-04
        • 2012-07-16
        • 2021-10-17
        • 1970-01-01
        • 2015-04-13
        • 2021-09-26
        相关资源
        最近更新 更多