[python]通过 alembic 更改外键相关的属性

当我们想修改已有的外键字段属性值时, alembic reversion --autogenerate 无法检查外键属性修改, 需要我们手动写相关的操作语句。

下面以修改外键的 ondeleteonupdate 属性为例,讲解如何修改外键属性。

假设有如下 Model:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

现在想要修改 Childparent_id 的外键属性:

parent_id = Column ...
more ...

[python]通过 alembic 重命名表列名(Model字段名)

为什么要特意讲一下这个,是因为 alembic 无法自动检测是否对字段名进行了重命名操作,需要我们手动添加相关语句。

假设有下面这样一个 Model

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String(20))

我们现在想要把 name 字段改名为 username, 通过 alembic revision --autogenerate 无法实现我们的目的:

INFO  [alembic.migration] Context impl MySQLImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added column ...
more ...