232 lines
9.3 KiB
TeX
232 lines
9.3 KiB
TeX
\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}
|
|
|