\section{\module{sqlite3} --- DB-API 2.0 interface for SQLite databases} \declaremodule{builtin}{sqlite3} \modulesynopsis{A DB-API 2.0 implementation using SQLite 3.x.} The module defines the following: \begin{datadesc}{PARSE_DECLTYPES} This constant is meant to be used with the detect_types parameter of the connect function. Setting it makes the sqlite3 module parse the declared type for each column it returns. It will parse out the first word of the declared type, i. e. for "integer primary key", it will parse out "integer". Then for that column, it will look into pysqlite's converters dictionary and use the converter function registered for that type there. Converter names are case-sensitive! \end{datadesc} \begin{datadesc}{PARSE_COLNAMES} Setting this makes pysqlite parse the column name for each column it returns. It will look for a string formed [mytype] in there, and then decide that 'mytype' is the type of the column. It will try to find an entry of 'mytype' in the converters dictionary and then use the converter function found there to return the value. The column name found in cursor.description is only the first word of the column name, i. e. if you use something like 'as "x [datetime]"' in your SQL, then pysqlite will parse out everything until the first blank for the column name: the column name would simply be "x". \end{datadesc} \begin{funcdesc}{connect}{database\optional{, timeout, isolation_level, detect_types, check_same_thread, factory}} Opens a connection to the SQLite database file \var{database}. You can use \code{":memory:"} to open a database connection to a database that resides in RAM instead of on disk. When a database is accessed by multiple connections, and one of the processes modifies the database, the SQLite database is locked until that transaction is committed. The \var{timeout} parameter specifies how long the connection should wait for the lock to go away until raising an exception. The default for the timeout parameter is 5.0 (five seconds). For the \var{isolation_level} parameter, please see TODO: link property of Connection objects. SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If you want to use other types, like you have to add support for them yourself. The \var{detect_types} parameter and the using custom *converters* registered with the module-level *register_converter* function allow you to easily do that. \var{detect_types} defaults to 0 (i. e. off, no type detection), you can set it to any combination of *PARSE_DECLTYPES* and *PARSE_COLNAMES* to turn type detection on. By default, the sqlite3 module uses its Connection class for the connect call. You can, however, subclass the Connection class and make .connect() use your class instead by providing your class for the \var{factory} parameter. Consult the section `4. SQLite and Python types`_ of this manual for details. The sqlite3 module internally uses a statement cache to avoid SQL parsing overhead. If you want to explicitly set the number of statements that are cached for the connection, you can set the \var{cached_statements} parameter. The currently implemented default is to cache 100 statements. \end{funcdesc} \begin{funcdesc}{register_converter}{typename, callable} Registers a callable to convert a bytestring from the database into a custom Python type. The callable will be invoked for all database values that are of the type \var{typename}. Confer the parameter **detect_types** of the **connect** method for how the type detection works. Note that the case of \var{typename} and the name of the type in your query must match! \end{funcdesc} \begin{funcdesc}{register_adapter}{type, callable} Registers a callable to convert the custom Python type \var{type} into one of SQLite's supported types. The callable \var{callable} accepts as single parameter the Python value, and must return a value of the following types: int, long, float, str (UTF-8 encoded), unicode or buffer. \end{funcdesc} \subsection{Connection Objects \label{sqlite3-Connection-Objects}} A \class{Connection} instance has the following attributes and methods: \begin{memberdesc}{isolation_level} Get or set the current isolation level. None for autocommit mode or one of "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See `5. Controlling Transactions`_ for a more detailed explanation. \end{memberdesc} \begin{methoddesc}{cursor}{\optional{cursorClass}} The cursor method accepts a single optional parameter \var{cursorClass}. This is a custom cursor class which must extend \class{sqlite3.Cursor}. \end{methoddesc} \begin{methoddesc}{execute}{sql, \optional{parameters}} This is a nonstandard shortcut that creates an intermediate cursor object by calling the cursor method, then calls the cursor's execute method with the parameters given. \end{methoddesc} \begin{methoddesc}{executemany}{sql, \optional{parameters}} This is a nonstandard shortcut that creates an intermediate cursor object by calling the cursor method, then calls the cursor's executemany method with the parameters given. \end{methoddesc} \begin{methoddesc}{executescript}{sql_script} This is a nonstandard shortcut that creates an intermediate cursor object by calling the cursor method, then calls the cursor's executescript method with the parameters given. \end{methoddesc} \begin{memberdesc}{row_factory} You can change this attribute to a callable that accepts the cursor and the original row as tuple and will return the real result row. This way, you can implement more advanced ways of returning results, like ones that can also access columns by name. Example: \verbatiminput{sqlite3/row_factory.py} If the standard tuple types don't suffice for you, and you want name-based access to columns, you should consider setting \member{row_factory} to the highly-optimized pysqlite2.dbapi2.Row type. It provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. Much better than your own custom dictionary-based approach or even a db_row based solution. \end{memberdesc} \begin{memberdesc}{text_factory} Using this attribute you can control what objects pysqlite returns for the TEXT data type. By default, this attribute is set to ``unicode`` and pysqlite will return Unicode objects for TEXT. If you want to return bytestrings instead, you can set it to ``str``. For efficiency reasons, there's also a way to return Unicode objects only for non-ASCII data, and bytestrings otherwise. To activate it, set this attribute to ``pysqlite2.dbapi2.OptimizedUnicode``. You can also set it to any other callable that accepts a single bytestring parameter and returns the result object. See the following example code for illustration: \verbatiminput{sqlite3/text_factory.py} \end{memberdesc} \begin{memberdesc}{total_changes} Returns the total number of database rows that have be modified, inserted, or deleted since the database connection was opened. \end{memberdesc} \subsection{Cursor Objects \label{Cursor-Objects}} A \class{Cursor} instance has the following attributes and methods: \begin{methoddesc}{execute}{sql, \optional{parameters}} Executes a SQL statement. The SQL statement may be parametrized (i. e. placeholders instead of SQL literals). The sqlite3 module supports two kinds of placeholders: question marks (qmark style) and named placeholders (named style). This example shows how to use parameters with qmark style: \verbatiminput{sqlite3/execute_1.py} This example shows how to use the named style: \verbatiminput{sqlite3/execute_2.py} \method{execute} will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a Warning. Use \method{executescript} if want to execute multiple SQL statements with one call. \end{methoddesc} \begin{methoddesc}{executemany}{sql, seq_of_parameters} Executes a SQL command against all parameter sequences or mappings found in the sequence \var{sql}. The \module{sqlite3} module also allows to use an iterator yielding parameters instead of a sequence. \verbatiminput{sqlite3/executemany_1.py} Here's a shorter example using a generator: \verbatiminput{sqlite3/executemany_2.py} \end{methoddesc} \begin{methoddesc}{executescript}{sql_script} This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a COMMIT statement before, then executes the SQL script it gets as a parameter. \var{sql_script} can be a bytestring or a Unicode string. Example: \verbatiminput{sqlite3/executescript.py} \end{methoddesc} \begin{memberdesc}{rowcount} Although the Cursors of the \module{sqlite3} module implement this attribute, the database engine's own support for the determination of "rows affected"/"rows selected" is quirky. For \code{SELECT} statements, \member{rowcount} is always None because we cannot determine the number of rows a query produced until all rows were fetched. For \code{DELETE} statements, SQLite reports \member{rowcount} as 0 if you make a \code{DELETE FROM table} without any condition. For \method{executemany} statements, pysqlite sums up the number of modifications into \member{rowcount}. As required by the Python DB API Spec, the \member{rowcount} attribute "is -1 in case no executeXX() has been performed on the cursor or the rowcount of the last operation is not determinable by the interface". \end{memberdesc}