La versione 2.1 ha introdotto l'argomento metadata
nell'estensione. Se tutto ciò che si desidera personalizzare sul modello di base sono i metadati, è possibile passare un'istanza personalizzata MetaData
ad esso.
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',
}))
In precedenza, si potrebbe creare una sottoclasse della classe SQLAlchemy
e sovrascrivere make_declarative_base
. Funziona ancora ed è utile se è necessario personalizzare ulteriormente il modello di 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