Wersja 2.1 wprowadziła argument metadata
do rozszerzenia. Jeśli wszystko, co chcesz dostosować do modelu podstawowego, to metadane, możesz przekazać mu niestandardową instancję 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',
}))
Wcześniej byś podklasy klasy SQLAlchemy
i zastąpić make_declarative_base
. To nadal działa i jest użyteczne, jeśli potrzebujesz dalszego dostosowania modelu podstawowego.
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