'Construct a :class:`.Sequence` object.
:param name: The name of the sequence.
:param start: the starting index of the sequence.  This value is
used when the CREATE SEQUENCE command is emitted to the database
as the value of the "START WITH" clause.   If ``None``, the
clause is omitted, which on most platforms indicates a starting
value of 1.
:param increment: the increment value of the sequence.  This
value is used when the CREATE SEQUENCE command is emitted to
the database as the value of the "INCREMENT BY" clause.  If ``None``,
the clause is omitted, which on most platforms indicates an
increment of 1.
:param schema: Optional schema name for the sequence, if located
in a schema other than the default.
:param optional: boolean value, when ``True``, indicates that this
:class:`.Sequence` object only needs to be explicitly generated
on backends that don\'t provide another way to generate primary
key identifiers.  Currently, it essentially means, "don\'t create
this sequence on the Postgresql backend, where the SERIAL keyword
creates a sequence for us automatically".
:param quote: boolean value, when ``True`` or ``False``, explicitly
forces quoting of the schema name on or off.  When left at its
default of ``None``, normal quoting rules based on casing and reserved
words take place.
:param quote_schema: set the quoting preferences for the ``schema``
name.
:param metadata: optional :class:`.MetaData` object which will be
associated with this :class:`.Sequence`.  A :class:`.Sequence`
that is associated with a :class:`.MetaData` gains access to the
``bind`` of that :class:`.MetaData`, meaning the
:meth:`.Sequence.create` and :meth:`.Sequence.drop` methods will
make usage of that engine automatically.
.. versionchanged:: 0.7
Additionally, the appropriate CREATE SEQUENCE/
DROP SEQUENCE DDL commands will be emitted corresponding to this
:class:`.Sequence` when :meth:`.MetaData.create_all` and
:meth:`.MetaData.drop_all` are invoked.
Note that when a :class:`.Sequence` is applied to a :class:`.Column`,
the :class:`.Sequence` is automatically associated with the
:class:`.MetaData` object of that column\'s parent :class:`.Table`,
when that association is made.   The :class:`.Sequence` will then
be subject to automatic CREATE SEQUENCE/DROP SEQUENCE corresponding
to when the :class:`.Table` object itself is created or dropped,
rather than that of the :class:`.MetaData` object overall.
:param for_update: Indicates this :class:`.Sequence`, when associated
with a :class:`.Column`, should be invoked for UPDATE statements
on that column\'s table, rather than for INSERT statements, when
no value is otherwise present for that column in the statement.'

def __init__(self, name, start=None, increment=None, schema=None, optional=False, quote=None, metadata=None, quote_schema=None, for_update=False):

    super(Sequence, self).__init__(for_update=for_update)
    self.name = quoted_name(name, quote)
    self.start = start
    self.increment = increment
    self.optional = optional
    if ((metadata is not None) and (schema is None) and metadata.schema):
        self.schema = schema = metadata.schema
    else:
        self.schema = quoted_name(schema, quote_schema)
    self.metadata = metadata
    self._key = _get_table_key(name, schema)
    if metadata:
        self._set_metadata(metadata)
