On 01/25/2016 02:51 PM, Gastón Avila wrote:
> Hi all,
> 
> I have set up specific naming conventions in a Flask-Sqlalchemy app
> using the metadata argument and it all seems to work except for naming
> PRIMARY KEY constraints. Here is what I have
> 
> |
> self.db.init_app(app)
> self.db.Model.metadata =MetaData(
>  schema=self.app.config['SQLALCHEMY_DATABASE_SCHEMA'],
>  naming_convention={
>   "columns":columns,
>   "ix":'%(table_name)s_%(columns)s_idx',
>   "uq":"%(table_name)s_%(columns)s_key",
>   "fk":"%(table_name)s_%(columns)s_fkey",
>   "pk":"%(table_name)s_%(columns)s_pkey"
>  }
> )
> |
> 
> and the *columns* helper is defined by:
> |
> defcolumns(constraint,table):
>     return"_".join([col.name forcol inconstraint.columns])
> |
> 
> It works for every single kind except for the *primary key* property of
> the naming convention obj. When printed out, the helper receives a
> constraint argument that when
> |
> printconstraint
> |
> is added, gives *PrimaryKeyConstraint()* so no columns can be gotten
> from it.

Table makes its own PrimaryKeyConstraint up front and the naming
convention is not "deferred", that is the convention is called
immediately, so you'd need to specify a PrimaryKeyConstraint explicitly;
the good news is you can forego the "primary_key=True" flag within
columns when working this way:

def columns(constraint, table):
    return "_".join([col.name for col in constraint.columns])

from sqlalchemy import MetaData, Integer, Column, Table, create_engine,
PrimaryKeyConstraint

m = MetaData(
    naming_convention={
        "columns": columns,
        "ix": '%(table_name)s_%(columns)s_idx',
        "uq": "%(table_name)s_%(columns)s_key",
        "fk": "%(table_name)s_%(columns)s_fkey",
        "pk": "%(table_name)s_%(columns)s_pkey"
        }
)

t = Table('t', m, Column('id', Integer), PrimaryKeyConstraint('id'))

e = create_engine("sqlite://", echo=True)
m.create_all(e)



> 
> Does anyone know what could be causing this? I have a guess that it
> might be this flask-sqlalchemy pluging but cannot figure it out.
> 
> Thanks a lot!
> 
> 
> -- 
> 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
> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
> To post to this group, send email to sqlalchemy@googlegroups.com
> <mailto:sqlalchemy@googlegroups.com>.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
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