# eXtremeSQL Sequences in Python

> The eXtremeDB Python wrapper extends the SQL DB API specification by allowing operations with eXtremeDB `sequences`. A `sequence` may appear as a result of a `SELECT` statement, or, as a parameter in `INSERT` or `UPDATE` statements.

> For example, the following statement could be sent to the SQL engine:

>         >>> cursor.execute("SELECT stamp, low, high FROM Quote WHERE symbol = ?", ('AAA',))

> The result of this query will be:

>         >>>  row = cursor.fetchone()
>         >>> print "Row is:", row
>         Row is: (<exdb.SequenceIterator object at 0x1008f6610>,
>             <exdb.SequenceIterator object at 0x1008f7610>,
>             <exdb.SequenceIterator object at 0x1008f8610>)

> Note that the resulting row contains SequenceIterator objects as row values. Regular iterator methods can be applied to this iterator. Note that, except in the case of a query result, the returned iterator will be “not materialized”.

> To insert data into a `sequence`, pass data into the SQL statement as a parameter using `array.array` as a value. For example:

>         >>>cursor.execute('INSERT INTO Quote(symbol, stamp, open, close,
>                     high, low, volume)
>                     VALUES (?,?,?,?,?,?,?)',
>                     ('AAA', array.array('I', timestamps),
>                     array.array('f', opens),
>                     array.array('f', closes),
>                     array.array('f', highs),
>                     array.array('f', lows),
>                     array.array('I', volumes)))

> Note that `array.array` is strictly typed, so its type must match the `sequence` column type. If it does not match, the resulting behavior is unpredictable.