gpt4 book ai didi

python - 在 Flask-SQLAlchemy 中更改约束命名约定

转载 作者:太空狗 更新时间:2023-10-29 19:37:26 24 4
gpt4 key购买 nike

我想改变标准naming conventions在 Flask-SQLAlchemy 中设置的约束,以简化使用 Alembic 的迁移。

由于 Flask-SQLAlchemy 自行创建声明性基础(您可以在其中提供命名约定),因此我不确定执行此操作的最佳方法是什么。我可以在创建声明性基础后更改命名约定(即当我创建 Flask-SQLAlchemy 对象时)还是我必须继承 SQLAlchemy 类?有没有完全不同的方式?

最佳答案

2.1 版为扩展引入了 metadata 参数。如果您想要自定义的基本模型只是元数据,您可以将自定义的 MetaData 实例传递给它。

db = SQLAlchemy(metadata=MetaData(naming_convention={
'pk': 'pk_%(table_name)s',
'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
'ix': 'ix_%(table_name)s_%(column_0_name)s',
'uq': 'uq_%(table_name)s_%(column_0_name)s',
'ck': 'ck_%(table_name)s_%(constraint_name)s',
}))

以前,您会将 SQLAlchemy 类子类化并覆盖 make_declarative_base。这仍然有效,并且在您需要进一步自定义基本模型时非常有用。

from flask_sqlalchemy import SQLAlchemy as BaseSQLAlchemy, Model, _BoundDeclarativeMeta, _QueryProperty
from sqlalchemy import MetaData

class SQLAlchemy(BaseSQLAlchemy):
def make_declarative_base(self):
metadata = MetaData(naming_convention={
'pk': 'pk_%(table_name)s',
'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
'ix': 'ix_%(table_name)s_%(column_0_name)s',
'uq': 'uq_%(table_name)s_%(column_0_name)s',
'ck': 'ck_%(table_name)s_%(constraint_name)s',
})
base = declarative_base(metadata=metadata, cls=Model, name='Model', metaclass=_BoundDeclarativeMeta)
base.query = _QueryProperty(self)
return base

关于python - 在 Flask-SQLAlchemy 中更改约束命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com