据我所知,skip_autogenerate
Alembic 和 SQLAlchemy 都不会自动处理。但你可以将其添加到Table.info
像这样:
- 定义一个 mixin 添加
skip_autogenerate
to Table.info
。这是基于 Flask-SQLAlchemy 的绑定元混合 https://github.com/minisotm/flask-sqlalchemy/blob/master/flask_sqlalchemy/model.py#L114
class ModelInfoMetaMixin(object):
def __init__(cls, name, bases, d):
skip_autogenerate = d.pop("__skip_autogenerate__", None)
super(ModelInfoMetaMixin, cls).__init__(name, bases, d)
if skip_autogenerate is not None and getattr(cls, "__table__", None) is not None:
cls.__table__.info["skip_autogenerate"] = skip_autogenerate
- 使用这个 mixin 定义一个元类并将其传递给
declarative_base()
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
class DefaultMeta(ModelInfoMetaMixin, DeclarativeMeta):
pass
Model = declarative_base(cls=BaseModel, metaclass=DefaultMeta)
- 然后您可以使用此标记定义您的模型:
class OneModel(Model):
__skip_autogenerate__ = True
uuid = Column(UUID(as_uuid=True), primary_key=True)
- 最后,
skip_autogenerate
将在 Alembic 中提供include_object
:
def include_object(object, name, type_, reflected, compare_to):
# skip objects marked with "skip_autogenerate"
if object.info.get("skip_autogenerate", False):
return False
return True