我在我的应用中定义了一个表格,如下所示:
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)。据我了解,这个定义是在第一次启动时运行的,因此只更改此行不适用于现有数据库。它需要迁移到这个新定义。如何将已创建的数据库转换为新的所需定义?
答案 0 :(得分:0)
更新代码不会更新现有数据库架构是正确的。您可以使用Alembic自动生成和运行架构迁移。 Alembic可以通过将新编辑的元数据的模式与数据库中的模式进行比较,为您自动生成更改脚本。从这里开始:http://alembic.readthedocs.org/en/latest/
答案 1 :(得分: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
)
...
披露,我从这个 helpful guide 得到了这个解决方案。