'Create a SQL constraint.
:param name:
Optional, the in-database name of this ``Constraint``.
:param deferrable:
Optional bool.  If set, emit DEFERRABLE or NOT DEFERRABLE when
issuing DDL for this constraint.
:param initially:
Optional string.  If set, emit INITIALLY <value> when issuing DDL
for this constraint.
:param _create_rule:
a callable which is passed the DDLCompiler object during
compilation. Returns True or False to signal inline generation of
this Constraint.
The AddConstraint and DropConstraint DDL constructs provide
DDLElement\'s more comprehensive "conditional DDL" approach that is
passed a database connection when DDL is being issued. _create_rule
is instead called during any CREATE TABLE compilation, where there
may not be any transaction/connection in progress. However, it
allows conditional compilation of the constraint even for backends
which do not support addition of constraints through ALTER TABLE,
which currently includes SQLite.
_create_rule is used by some types to create constraints.
Currently, its call signature is subject to change at any time.
:param \**dialect_kw:  Additional keyword arguments are dialect specific,
and passed in the form ``<dialectname>_<argname>``.  See the
documentation regarding an individual dialect at :ref:`dialect_toplevel`
for detail on documented arguments.'

def __init__(self, name=None, deferrable=None, initially=None, _create_rule=None, **dialect_kw):

    self.name = name
    self.deferrable = deferrable
    self.initially = initially
    self._create_rule = _create_rule
    util.set_creation_order(self)
    self._validate_dialect_kwargs(dialect_kw)
