Gregg Lind wrote: > > I use declarative base for defining classes. > > I have a constraint that only works in Postgres. How do I declare > that constraint "lowername_check" only if the session is going > postgres (and not to sqlite, for example). > > pg_only_constraint = CheckConstraint("lowername !~ > '[[:upper:]]'",name='lowername_check'), > class Data(Base): > __tablename__ = 'Data' > lowername=Column(Unicode, nullable=False) > __table_args__ = ( > pg_only_constraint, {} > )
The cleanest way is to use the schema.DDL() construct which can filter against various backends, but requires that you spell out the constraint explicitly: DDL("CREATE CONSTRAINT ....", on="postgres").execute_at('after-create', Data.__table__) Alternatively, if you want to stick with the CheckConstraint object you can create a function "create_pg_constraints()" which is called at the point your app calls "create_engine()", that contains all PG specific constructs - the function would be called based on engine.dialect.name == "postgres". We have a more flexible architecture in 0.6 for this sort of thing and I think if we add an AddConstraint() construct there and also move most of DDL()'s execute-at and "on" functionality into the base DDLElement class, that would enable both constructs to be combined together as in AddConstraint(CheckConstraint(...args...), on="postgres")).execute_at('after-create', Data.__table__). > > > Thanks! > > Gregg Lind > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---