1

我在我的应用程序中定义了一个表,如下所示:

users = Table('users', metadata,
    Column('user_id', Integer, autoincrement=True, primary_key=True),
    Column('user_name', Unicode(16), unique=True, nullable=False),
    Column('email_address', Unicode(255), unique=True, nullable=False),
    Column('display_name', Unicode(255)),
    Column('password', Unicode(80)),
    Column('created', DateTime, default=datetime.now),
    mysql_engine='InnoDB',
    mysql_charset='utf8',
)

但是开发了一段时间后,想把user_name改成更长的长度,比如Unicode(255)。据我了解,此定义在首次启动时运行,因此仅更改此行不适用于现有数据库。它需要迁移到这个新定义。如何将已创建的数据库转换为新的、所需的定义?

4

2 回答 2

1

您是正确的,更新您的代码不会更新现有的数据库模式。您可以使用 Alembic 自动生成和运行架构迁移。Alembic 可以通过将新编辑的元数据的架构与数据库中的架构进行比较,为您自动生成更改脚本。从这里开始:http: //alembic.readthedocs.org/en/latest/

于 2013-02-20T03:50:49.577 回答
0

编辑alembic/env.py和修改您的配置以包括compare_type=True

def run_migrations_online():
    ...
    with connectable.connect() as connection:
            context.configure(
                connection=connection,
                target_metadata=target_metadata,
                compare_type=True, # <------------- THIS LINE HERE
            )
    ...

披露,我从这个有用的指南中得到了这个解决方案。

于 2021-01-08T04:01:26.510 回答