使用sqlalchemy将定义的列更改为更长的unicode

时间:2013-02-15 04:46:07

标签: mysql sqlalchemy

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

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)。据我了解,这个定义是在第一次启动时运行的,因此只更改此行不适用于现有数据库。它需要迁移到这个新定义。如何将已创建的数据库转换为新的所需定义?

2 个答案:

答案 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 得到了这个解决方案。