cpython/Doc/lib/libsqlite3.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}