It would have been great to be able to do it via a mixin, I have several DB
using decalarative base constructed with this Base mixin and I liked to
have the same naming_convention for all the DBs without repeating myself.
If it's not I guess i can still manage to find an acceptable way of doing
it using the decalarative_base arg.

Thanks.

Le mar. 4 sept. 2018 à 17:10, Simon King <si...@simonking.org.uk> a écrit :

> On Tue, Sep 4, 2018 at 3:48 PM <rdebr...@gmail.com> wrote:
> >
> > I'd like to create a mixin to specify naming conventions.
> >
> > I tried both:
> >
> > class Base:
> >     metadata = MetaData(naming_convention={
> >         "ix": "ix_%(column_0_label)s",
> >         "uq": "uq_%(table_name)s_%(column_0_name)s",
> >         "ck": "ck_%(table_name)s_%(constraint_name)s",
> >         "fk":
> "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
> >         "pk": "pk_%(table_name)",
> >     })
> >
> >
> > and
> >
> > class Base:
> >     @declared_attr
> >     def metadata(cls):
> >         return MetaData(naming_convention={
> >             "ix": "ix_%(column_0_label)s",
> >             "uq": "uq_%(table_name)s_%(column_0_name)s",
> >             "ck": "ck_%(table_name)s_%(constraint_name)s",
> >             "fk":
> "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
> >             "pk": "pk_%(table_name)",
> >         })
> >
> > But if I inspect a model created using this base I always got:
> >
> > >>> Test.metadata.naming_convention
> > immutabledict({'ix': 'ix_%(column_0_label)s'})
> >
> > while I correctly have:
> >
> > >>> Base.metadata.naming_convention
> > {'ix': 'ix_%(column_0_label)s',
> >  'uq': 'uq_%(table_name)s_%(column_0_name)s',
> >  'ck': 'ck_%(table_name)s_%(constraint_name)s',
> >  'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
> >  'pk': 'pk_%(table_name)'}
> >
> > What is the correct way to do it? what am i doing wrong? Should I do
> this in my migration tool (alembic) ?
> > Also would it works for unique constraint on multiple column or do we
> have to name them explicitly.
> >
>
> Is it important to you to do this via a mixin? declarative_base
> accepts a "metadata" parameter, so something like this should work:
>
>     metadata = MetaData(naming_convention={...})
>     Base = declarative_base(metadata=metadata)
>
> Hope that helps,
>
> Simon
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example.  See  http://stackoverflow.com/help/mcve for a full
> description.
> ---
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to