python - 如何使用 alembic 将 MySQL 表转换为 utf8 字符集?

标签 python mysql sqlalchemy alembic

我的数据库是 MySQL。我使用 SqlAlchemy ORM 来定义和访问它。我使用 Alembic 进行迁移。我有一个模型,其字段曾经只包含英文文本 (Ascii/latin-1)。现在,该字段需要包含 Unicode 文本。为了将我的模型转换为支持 MySQL 的 Unicode,我需要添加以下类级别属性: mysql_character_set = 'utf8'

class MyModel(Base):
    __tablename__ = 'mymodel'
    mysql_character_set = 'utf8'

    id = Column(Integer, primary_key=True)
    name = Column(String(64), unique=True, nullable=False)

到现在为止还挺好。我想将此属性添加为 Alembic 迁移脚本的一部分。我通常使用 Alembic 出色的自动生成命令:
alembic revision --autogenerate

问题是这个命令没有捕获每一个模型更改,特别是没有添加 mysql_character_set 属性。

如何将此属性手动添加到 alembic 迁移脚本?

最佳答案

我是这样做的:

from alembic import op
import sqlalchemy as sa


def upgrade():
    conn = op.get_bind()
    conn.execute(sa.sql.text('ALTER table my_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci'))

关于python - 如何使用 alembic 将 MySQL 表转换为 utf8 字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191213/

相关文章:

python - 使用 PyQt4 - QTableView 与 SQLAlchemy 使用 QSqlTableModel(或不)

python - 无法从脚本访问数据库

python - 警告 : failed to read path from javaldx

python - 检查大矩阵是否是python中的对角矩阵

python - Tkinter:从一帧获取变量以在另一帧中显示为标签

mysql - 相同的 MySQL 查询在同一服务器上返回不同的结果

python - 如何将基于类的任务传递给 CELERY_BEAT_SCHEDULE

mysql - MySQL 中何时使用单引号、双引号和反引号

java - JDBC 在为 mysql 创建用户时出现问题

python - 如何让 Flask-SQLAlchemy 与应用程序工厂模式一起工作