blob: b8bdbdc81318e833ccefb931dadc83cd99b7aa17 [file] [log] [blame]
Gerhard Häringeb2e1922006-04-29 23:12:41 +00001\section{\module{sqlite3} ---
2 DB-API 2.0 interface for SQLite databases}
3
4\declaremodule{builtin}{sqlite3}
Fred Drake6550f032006-05-01 06:25:58 +00005\modulesynopsis{A DB-API 2.0 implementation using SQLite 3.x.}
Gerhard Häring2b161d92006-05-12 23:49:49 +00006\sectionauthor{Gerhard Häring}{gh@ghaering.de}
7\versionadded{2.5}
Gerhard Häringeb2e1922006-04-29 23:12:41 +00008
Andrew M. Kuchling2b464342006-09-08 13:36:36 +00009SQLite is a C library that provides a lightweight disk-based database
10that doesn't require a separate server process and allows accessing
11the database using a nonstandard variant of the SQL query language.
12Some applications can use SQLite for internal data storage. It's also
13possible to prototype an application using SQLite and then port the
14code to a larger database such as PostgreSQL or Oracle.
15
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000016pysqlite was written by Gerhard H\"aring and provides a SQL interface
17compliant with the DB-API 2.0 specification described by
Andrew M. Kuchling2b464342006-09-08 13:36:36 +000018\pep{249}.
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000019
20To use the module, you must first create a \class{Connection} object
21that represents the database. Here the data will be stored in the
22\file{/tmp/example} file:
23
24\begin{verbatim}
25conn = sqlite3.connect('/tmp/example')
26\end{verbatim}
27
28You can also supply the special name \samp{:memory:} to create
29a database in RAM.
30
31Once you have a \class{Connection}, you can create a \class{Cursor}
32object and call its \method{execute()} method to perform SQL commands:
33
34\begin{verbatim}
35c = conn.cursor()
36
37# Create table
38c.execute('''create table stocks
Andrew M. Kuchling6d755672006-09-08 14:03:01 +000039(date text, trans text, symbol text,
40 qty real, price real)''')
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000041
42# Insert a row of data
43c.execute("""insert into stocks
44 values ('2006-01-05','BUY','RHAT',100,35.14)""")
45\end{verbatim}
46
47Usually your SQL operations will need to use values from Python
48variables. You shouldn't assemble your query using Python's string
49operations because doing so is insecure; it makes your program
50vulnerable to an SQL injection attack.
51
Andrew M. Kuchlinge275d3d2006-06-07 17:04:01 +000052Instead, use the DB-API's parameter substitution. Put \samp{?} as a
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000053placeholder wherever you want to use a value, and then provide a tuple
54of values as the second argument to the cursor's \method{execute()}
Andrew M. Kuchlinge275d3d2006-06-07 17:04:01 +000055method. (Other database modules may use a different placeholder,
56such as \samp{\%s} or \samp{:1}.) For example:
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000057
58\begin{verbatim}
59# Never do this -- insecure!
60symbol = 'IBM'
61c.execute("... where symbol = '%s'" % symbol)
62
63# Do this instead
64t = (symbol,)
65c.execute('select * from stocks where symbol=?', t)
66
67# Larger example
68for t in (('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
69 ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
70 ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
71 ):
72 c.execute('insert into stocks values (?,?,?,?,?)', t)
73\end{verbatim}
74
75To retrieve data after executing a SELECT statement, you can either
76treat the cursor as an iterator, call the cursor's \method{fetchone()}
77method to retrieve a single matching row,
78or call \method{fetchall()} to get a list of the matching rows.
79
80This example uses the iterator form:
81
82\begin{verbatim}
83>>> c = conn.cursor()
84>>> c.execute('select * from stocks order by price')
85>>> for row in c:
86... print row
87...
88(u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001)
89(u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)
90(u'2006-04-06', u'SELL', u'IBM', 500, 53.0)
91(u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0)
92>>>
93\end{verbatim}
94
95\begin{seealso}
96
97\seeurl{http://www.pysqlite.org}
98{The pysqlite web page.}
99
100\seeurl{http://www.sqlite.org}
101{The SQLite web page; the documentation describes the syntax and the
102available data types for the supported SQL dialect.}
103
104\seepep{249}{Database API Specification 2.0}{PEP written by
105Marc-Andr\'e Lemburg.}
106
107\end{seealso}
108
109
Gerhard Häring2b161d92006-05-12 23:49:49 +0000110\subsection{Module functions and constants\label{sqlite3-Module-Contents}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000111
112\begin{datadesc}{PARSE_DECLTYPES}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000113This constant is meant to be used with the \var{detect_types} parameter of the
114\function{connect} function.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000115
Gerhard Häring2b161d92006-05-12 23:49:49 +0000116Setting it makes the \module{sqlite3} module parse the declared type for each column it
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000117returns. It will parse out the first word of the declared type, i. e. for
118"integer primary key", it will parse out "integer". Then for that column, it
Gerhard Häring2b161d92006-05-12 23:49:49 +0000119will look into the converters dictionary and use the converter function
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000120registered for that type there. Converter names are case-sensitive!
121\end{datadesc}
122
123
124\begin{datadesc}{PARSE_COLNAMES}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000125This constant is meant to be used with the \var{detect_types} parameter of the
126\function{connect} function.
127
128Setting this makes the SQLite interface parse the column name for each column
129it returns. It will look for a string formed [mytype] in there, and then
130decide that 'mytype' is the type of the column. It will try to find an entry of
131'mytype' in the converters dictionary and then use the converter function found
132there to return the value. The column name found in \member{cursor.description} is only
133the first word of the column name, i. e. if you use something like
134\code{'as "x [datetime]"'} in your SQL, then we will parse out everything until the
135first blank for the column name: the column name would simply be "x".
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000136\end{datadesc}
137
Gerhard Häring2b161d92006-05-12 23:49:49 +0000138\begin{funcdesc}{connect}{database\optional{, timeout, isolation_level, detect_types, factory}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000139Opens a connection to the SQLite database file \var{database}. You can use
140\code{":memory:"} to open a database connection to a database that resides in
141RAM instead of on disk.
142
143When a database is accessed by multiple connections, and one of the processes
144modifies the database, the SQLite database is locked until that transaction is
145committed. The \var{timeout} parameter specifies how long the connection should
146wait for the lock to go away until raising an exception. The default for the
147timeout parameter is 5.0 (five seconds).
148
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000149For the \var{isolation_level} parameter, please see the \member{isolation_level}
150property of \class{Connection} objects in section~\ref{sqlite3-Connection-IsolationLevel}.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000151
152SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
153you want to use other types, like you have to add support for them yourself.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000154The \var{detect_types} parameter and the using custom \strong{converters} registered with
155the module-level \function{register_converter} function allow you to easily do that.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000156
157\var{detect_types} defaults to 0 (i. e. off, no type detection), you can set it
Gerhard Häring2b161d92006-05-12 23:49:49 +0000158to any combination of \constant{PARSE_DECLTYPES} and \constant{PARSE_COLNAMES} to turn type
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000159detection on.
160
Gerhard Häring2b161d92006-05-12 23:49:49 +0000161By default, the \module{sqlite3} module uses its \class{Connection} class for the
162connect call. You can, however, subclass the \class{Connection} class and make
163\function{connect} use your class instead by providing your class for the
164\var{factory} parameter.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000165
Gerhard Häring2b161d92006-05-12 23:49:49 +0000166Consult the section \ref{sqlite3-Types} of this manual for details.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000167
Gerhard Häring2b161d92006-05-12 23:49:49 +0000168The \module{sqlite3} module internally uses a statement cache to avoid SQL parsing
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000169overhead. If you want to explicitly set the number of statements that are
170cached for the connection, you can set the \var{cached_statements} parameter.
171The currently implemented default is to cache 100 statements.
172\end{funcdesc}
173
174\begin{funcdesc}{register_converter}{typename, callable}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000175Registers a callable to convert a bytestring from the database into a custom
176Python type. The callable will be invoked for all database values that are of
Gerhard Häring2b161d92006-05-12 23:49:49 +0000177the type \var{typename}. Confer the parameter \var{detect_types} of the
178\function{connect} function for how the type detection works. Note that the case of
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000179\var{typename} and the name of the type in your query must match!
180\end{funcdesc}
181
182\begin{funcdesc}{register_adapter}{type, callable}
183Registers a callable to convert the custom Python type \var{type} into one of
184SQLite's supported types. The callable \var{callable} accepts as single
185parameter the Python value, and must return a value of the following types:
186int, long, float, str (UTF-8 encoded), unicode or buffer.
187\end{funcdesc}
188
Gerhard Häring2b161d92006-05-12 23:49:49 +0000189\begin{funcdesc}{complete_statement}{sql}
190Returns \constant{True} if the string \var{sql} one or more complete SQL
191statements terminated by semicolons. It does not verify if the SQL is
192syntactically correct, only if there are no unclosed string literals and if the
193statement is terminated by a semicolon.
194
195This can be used to build a shell for SQLite, like in the following example:
196
197 \verbatiminput{sqlite3/complete_statement.py}
198\end{funcdesc}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000199
Andrew M. Kuchlingabd55202006-09-12 20:50:23 +0000200\begin{funcdesc}{enable_callback_tracebacks}{flag}
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000201By default you will not get any tracebacks in user-defined functions,
202aggregates, converters, authorizer callbacks etc. If you want to debug them,
203you can call this function with \var{flag} as True. Afterwards, you will get
204tracebacks from callbacks on \code{sys.stderr}. Use \constant{False} to disable
205the feature again.
206\end{funcdesc}
207
Fred Drake6550f032006-05-01 06:25:58 +0000208\subsection{Connection Objects \label{sqlite3-Connection-Objects}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000209
210A \class{Connection} instance has the following attributes and methods:
211
Gerhard Häring2b161d92006-05-12 23:49:49 +0000212\label{sqlite3-Connection-IsolationLevel}
Fred Drake6550f032006-05-01 06:25:58 +0000213\begin{memberdesc}{isolation_level}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000214 Get or set the current isolation level. None for autocommit mode or one of
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000215 "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See ``Controlling Transactions'',
216 section~\ref{sqlite3-Controlling-Transactions}, for a more detailed explanation.
Fred Drake6550f032006-05-01 06:25:58 +0000217\end{memberdesc}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000218
219\begin{methoddesc}{cursor}{\optional{cursorClass}}
Fred Drake6550f032006-05-01 06:25:58 +0000220 The cursor method accepts a single optional parameter \var{cursorClass}.
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000221 If supplied, this must be a custom cursor class that extends
222 \class{sqlite3.Cursor}.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000223\end{methoddesc}
224
Gerhard Häring82560eb2006-05-01 15:14:48 +0000225\begin{methoddesc}{execute}{sql, \optional{parameters}}
226This is a nonstandard shortcut that creates an intermediate cursor object by
Gerhard Häring2b161d92006-05-12 23:49:49 +0000227calling the cursor method, then calls the cursor's \method{execute} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000228parameters given.
229\end{methoddesc}
230
231\begin{methoddesc}{executemany}{sql, \optional{parameters}}
232This is a nonstandard shortcut that creates an intermediate cursor object by
Gerhard Häring2b161d92006-05-12 23:49:49 +0000233calling the cursor method, then calls the cursor's \method{executemany} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000234parameters given.
235\end{methoddesc}
236
237\begin{methoddesc}{executescript}{sql_script}
238This is a nonstandard shortcut that creates an intermediate cursor object by
Gerhard Häring2b161d92006-05-12 23:49:49 +0000239calling the cursor method, then calls the cursor's \method{executescript} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000240parameters given.
241\end{methoddesc}
242
Gerhard Häring2b161d92006-05-12 23:49:49 +0000243\begin{methoddesc}{create_function}{name, num_params, func}
244
245Creates a user-defined function that you can later use from within SQL
246statements under the function name \var{name}. \var{num_params} is the number
247of parameters the function accepts, and \var{func} is a Python callable that is
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000248called as the SQL function.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000249
250The function can return any of the types supported by SQLite: unicode, str,
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000251int, long, float, buffer and None.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000252
253Example:
254
255 \verbatiminput{sqlite3/md5func.py}
256\end{methoddesc}
257
258\begin{methoddesc}{create_aggregate}{name, num_params, aggregate_class}
259
260Creates a user-defined aggregate function.
261
262The aggregate class must implement a \code{step} method, which accepts the
263number of parameters \var{num_params}, and a \code{finalize} method which
264will return the final result of the aggregate.
265
266The \code{finalize} method can return any of the types supported by SQLite:
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000267unicode, str, int, long, float, buffer and None.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000268
269Example:
270
271 \verbatiminput{sqlite3/mysumaggr.py}
272\end{methoddesc}
273
274\begin{methoddesc}{create_collation}{name, callable}
275
276Creates a collation with the specified \var{name} and \var{callable}. The
277callable will be passed two string arguments. It should return -1 if the first
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000278is ordered lower than the second, 0 if they are ordered equal and 1 if the
Gerhard Häring2b161d92006-05-12 23:49:49 +0000279first is ordered higher than the second. Note that this controls sorting
280(ORDER BY in SQL) so your comparisons don't affect other SQL operations.
281
282Note that the callable will get its parameters as Python bytestrings, which
283will normally be encoded in UTF-8.
284
285The following example shows a custom collation that sorts "the wrong way":
286
287 \verbatiminput{sqlite3/collation_reverse.py}
288
289To remove a collation, call \code{create_collation} with None as callable:
290
291\begin{verbatim}
292 con.create_collation("reverse", None)
293\end{verbatim}
294\end{methoddesc}
295
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000296\begin{methoddesc}{interrupt}{}
297
298You can call this method from a different thread to abort any queries that
299might be executing on the connection. The query will then abort and the caller
300will get an exception.
301\end{methoddesc}
302
303\begin{methoddesc}{set_authorizer}{authorizer_callback}
304
305This routine registers a callback. The callback is invoked for each attempt to
306access a column of a table in the database. The callback should return
307\constant{SQLITE_OK} if access is allowed, \constant{SQLITE_DENY} if the entire
308SQL statement should be aborted with an error and \constant{SQLITE_IGNORE} if
309the column should be treated as a NULL value. These constants are available in
310the \module{sqlite3} module.
311
312The first argument to the callback signifies what kind of operation is to be
313authorized. The second and third argument will be arguments or \constant{None}
314depending on the first argument. The 4th argument is the name of the database
315("main", "temp", etc.) if applicable. The 5th argument is the name of the
316inner-most trigger or view that is responsible for the access attempt or
317\constant{None} if this access attempt is directly from input SQL code.
318
319Please consult the SQLite documentation about the possible values for the first
320argument and the meaning of the second and third argument depending on the
321first one. All necessary constants are available in the \module{sqlite3}
322module.
323\end{methoddesc}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000324
Gerhard Häring82560eb2006-05-01 15:14:48 +0000325\begin{memberdesc}{row_factory}
326 You can change this attribute to a callable that accepts the cursor and
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000327 the original row as a tuple and will return the real result row. This
328 way, you can implement more advanced ways of returning results, such
329 as returning an object that can also access columns by name.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000330
331 Example:
332
333 \verbatiminput{sqlite3/row_factory.py}
334
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000335 If returning a tuple doesn't suffice and you want name-based
Gerhard Häring82560eb2006-05-01 15:14:48 +0000336 access to columns, you should consider setting \member{row_factory} to the
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000337 highly-optimized \class{sqlite3.Row} type. \class{Row} provides both
Gerhard Häring82560eb2006-05-01 15:14:48 +0000338 index-based and case-insensitive name-based access to columns with almost
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000339 no memory overhead. It will probably be better than your own custom
340 dictionary-based approach or even a db_row based solution.
341 % XXX what's a db_row-based solution?
Gerhard Häring82560eb2006-05-01 15:14:48 +0000342\end{memberdesc}
343
344\begin{memberdesc}{text_factory}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000345 Using this attribute you can control what objects are returned for the
346 TEXT data type. By default, this attribute is set to \class{unicode} and
347 the \module{sqlite3} module will return Unicode objects for TEXT. If you want to return
348 bytestrings instead, you can set it to \class{str}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000349
350 For efficiency reasons, there's also a way to return Unicode objects only
351 for non-ASCII data, and bytestrings otherwise. To activate it, set this
Gerhard Häring2b161d92006-05-12 23:49:49 +0000352 attribute to \constant{sqlite3.OptimizedUnicode}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000353
354 You can also set it to any other callable that accepts a single bytestring
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000355 parameter and returns the resulting object.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000356
357 See the following example code for illustration:
358
359 \verbatiminput{sqlite3/text_factory.py}
360\end{memberdesc}
361
362\begin{memberdesc}{total_changes}
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000363 Returns the total number of database rows that have been modified, inserted,
Gerhard Häring82560eb2006-05-01 15:14:48 +0000364 or deleted since the database connection was opened.
365\end{memberdesc}
366
367
368
369
370
Gerhard Häring2b161d92006-05-12 23:49:49 +0000371\subsection{Cursor Objects \label{sqlite3-Cursor-Objects}}
Gerhard Häring82560eb2006-05-01 15:14:48 +0000372
373A \class{Cursor} instance has the following attributes and methods:
374
375\begin{methoddesc}{execute}{sql, \optional{parameters}}
376
377Executes a SQL statement. The SQL statement may be parametrized (i. e.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000378placeholders instead of SQL literals). The \module{sqlite3} module supports two kinds of
Gerhard Häring82560eb2006-05-01 15:14:48 +0000379placeholders: question marks (qmark style) and named placeholders (named
380style).
381
382This example shows how to use parameters with qmark style:
383
384 \verbatiminput{sqlite3/execute_1.py}
385
386This example shows how to use the named style:
387
388 \verbatiminput{sqlite3/execute_2.py}
389
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000390 \method{execute()} will only execute a single SQL statement. If you try to
Gerhard Häring82560eb2006-05-01 15:14:48 +0000391 execute more than one statement with it, it will raise a Warning. Use
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000392 \method{executescript()} if you want to execute multiple SQL statements with one
Gerhard Häring82560eb2006-05-01 15:14:48 +0000393 call.
394\end{methoddesc}
395
396
397\begin{methoddesc}{executemany}{sql, seq_of_parameters}
398Executes a SQL command against all parameter sequences or mappings found in the
399sequence \var{sql}. The \module{sqlite3} module also allows
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000400using an iterator yielding parameters instead of a sequence.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000401
402\verbatiminput{sqlite3/executemany_1.py}
403
404Here's a shorter example using a generator:
405
406\verbatiminput{sqlite3/executemany_2.py}
407\end{methoddesc}
408
409\begin{methoddesc}{executescript}{sql_script}
410
411This is a nonstandard convenience method for executing multiple SQL statements
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000412at once. It issues a COMMIT statement first, then executes the SQL script it
Gerhard Häring82560eb2006-05-01 15:14:48 +0000413gets as a parameter.
414
415\var{sql_script} can be a bytestring or a Unicode string.
416
417Example:
418
419\verbatiminput{sqlite3/executescript.py}
420\end{methoddesc}
421
422\begin{memberdesc}{rowcount}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000423 Although the \class{Cursor} class of the \module{sqlite3} module implements this
Gerhard Häring82560eb2006-05-01 15:14:48 +0000424 attribute, the database engine's own support for the determination of "rows
425 affected"/"rows selected" is quirky.
426
427 For \code{SELECT} statements, \member{rowcount} is always None because we cannot
428 determine the number of rows a query produced until all rows were fetched.
429
430 For \code{DELETE} statements, SQLite reports \member{rowcount} as 0 if you make a
431 \code{DELETE FROM table} without any condition.
432
Gerhard Häring2b161d92006-05-12 23:49:49 +0000433 For \method{executemany} statements, the number of modifications are summed
434 up into \member{rowcount}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000435
436 As required by the Python DB API Spec, the \member{rowcount} attribute "is -1
437 in case no executeXX() has been performed on the cursor or the rowcount
438 of the last operation is not determinable by the interface".
439\end{memberdesc}
440
Gerhard Häring2b161d92006-05-12 23:49:49 +0000441\subsection{SQLite and Python types\label{sqlite3-Types}}
442
443\subsubsection{Introduction}
444
445SQLite natively supports the following types: NULL, INTEGER, REAL, TEXT, BLOB.
446
447The following Python types can thus be sent to SQLite without any problem:
448
449\begin{tableii} {c|l}{code}{Python type}{SQLite type}
450\lineii{None}{NULL}
451\lineii{int}{INTEGER}
452\lineii{long}{INTEGER}
453\lineii{float}{REAL}
454\lineii{str (UTF8-encoded)}{TEXT}
455\lineii{unicode}{TEXT}
456\lineii{buffer}{BLOB}
457\end{tableii}
458
459This is how SQLite types are converted to Python types by default:
460
461\begin{tableii} {c|l}{code}{SQLite type}{Python type}
462\lineii{NULL}{None}
463\lineii{INTEGER}{int or long, depending on size}
464\lineii{REAL}{float}
465\lineii{TEXT}{depends on text_factory, unicode by default}
466\lineii{BLOB}{buffer}
467\end{tableii}
468
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000469The type system of the \module{sqlite3} module is extensible in two ways: you can store
Gerhard Häring2b161d92006-05-12 23:49:49 +0000470additional Python types in a SQLite database via object adaptation, and you can
471let the \module{sqlite3} module convert SQLite types to different Python types via
472converters.
473
474\subsubsection{Using adapters to store additional Python types in SQLite databases}
475
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000476As described before, SQLite supports only a limited set of types natively. To
Gerhard Häring2b161d92006-05-12 23:49:49 +0000477use other Python types with SQLite, you must \strong{adapt} them to one of the sqlite3
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000478module's supported types for SQLite: one of NoneType, int, long, float,
Gerhard Häring2b161d92006-05-12 23:49:49 +0000479str, unicode, buffer.
480
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000481The \module{sqlite3} module uses Python object adaptation, as described in \pep{246} for this. The protocol to use is \class{PrepareProtocol}.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000482
483There are two ways to enable the \module{sqlite3} module to adapt a custom Python type
484to one of the supported ones.
485
486\paragraph{Letting your object adapt itself}
487
488This is a good approach if you write the class yourself. Let's suppose you have
489a class like this:
490
491\begin{verbatim}
492class Point(object):
493 def __init__(self, x, y):
494 self.x, self.y = x, y
495\end{verbatim}
496
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000497Now you want to store the point in a single SQLite column. First you'll have to
498choose one of the supported types first to be used for representing the point.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000499Let's just use str and separate the coordinates using a semicolon. Then you
500need to give your class a method \code{__conform__(self, protocol)} which must
501return the converted value. The parameter \var{protocol} will be
502\class{PrepareProtocol}.
503
504\verbatiminput{sqlite3/adapter_point_1.py}
505
506\paragraph{Registering an adapter callable}
507
508The other possibility is to create a function that converts the type to the
509string representation and register the function with \method{register_adapter}.
510
Gerhard Häring2b161d92006-05-12 23:49:49 +0000511\begin{notice}
512The type/class to adapt must be a new-style class, i. e. it must have
513\class{object} as one of its bases.
514\end{notice}
515
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000516 \verbatiminput{sqlite3/adapter_point_2.py}
517
Fred Drakee0d4aec2006-07-30 03:03:43 +0000518The \module{sqlite3} module has two default adapters for Python's built-in
519\class{datetime.date} and \class{datetime.datetime} types. Now let's suppose
520we want to store \class{datetime.datetime} objects not in ISO representation,
521but as a \UNIX{} timestamp.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000522
523 \verbatiminput{sqlite3/adapter_datetime.py}
524
525\subsubsection{Converting SQLite values to custom Python types}
526
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000527Writing an adapter lets you send custom Python types to SQLite.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000528But to make it really useful we need to make the Python to SQLite to Python
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000529roundtrip work.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000530
531Enter converters.
532
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000533Let's go back to the \class{Point} class. We stored the x and y
534coordinates separated via semicolons as strings in SQLite.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000535
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000536First, we'll define a converter function that accepts the string as a
537parameter and constructs a \class{Point} object from it.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000538
539\begin{notice}
540Converter functions \strong{always} get called with a string, no matter
541under which data type you sent the value to SQLite.
542\end{notice}
543
544\begin{notice}
545Converter names are looked up in a case-sensitive manner.
546\end{notice}
547
548
549\begin{verbatim}
550 def convert_point(s):
551 x, y = map(float, s.split(";"))
552 return Point(x, y)
553\end{verbatim}
554
555Now you need to make the \module{sqlite3} module know that what you select from the
556database is actually a point. There are two ways of doing this:
557
558\begin{itemize}
559 \item Implicitly via the declared type
560 \item Explicitly via the column name
561\end{itemize}
562
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000563Both ways are described in ``Module Constants'', section~\ref{sqlite3-Module-Contents}, in
564the entries for the constants \constant{PARSE_DECLTYPES} and
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000565\constant{PARSE_COLNAMES}.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000566
567
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000568The following example illustrates both approaches.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000569
570 \verbatiminput{sqlite3/converter_point.py}
571
572\subsubsection{Default adapters and converters}
573
574There are default adapters for the date and datetime types in the datetime
575module. They will be sent as ISO dates/ISO timestamps to SQLite.
576
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000577The default converters are registered under the name "date" for \class{datetime.date}
578and under the name "timestamp" for \class{datetime.datetime}.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000579
580This way, you can use date/timestamps from Python without any additional
581fiddling in most cases. The format of the adapters is also compatible with the
582experimental SQLite date/time functions.
583
584The following example demonstrates this.
585
586 \verbatiminput{sqlite3/pysqlite_datetime.py}
587
588\subsection{Controlling Transactions \label{sqlite3-Controlling-Transactions}}
589
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000590By default, the \module{sqlite3} module opens transactions implicitly before a Data Modification Language (DML)
591statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
592before a non-DML, non-query statement (i. e. anything other than
Gerhard Häring2b161d92006-05-12 23:49:49 +0000593SELECT/INSERT/UPDATE/DELETE/REPLACE).
594
Andrew M. Kuchling32cec802006-09-12 21:09:02 +0000595So if you are within a transaction and issue a command like \code{CREATE TABLE
Gerhard Häring2b161d92006-05-12 23:49:49 +0000596...}, \code{VACUUM}, \code{PRAGMA}, the \module{sqlite3} module will commit implicitly
597before executing that command. There are two reasons for doing that. The first
598is that some of these commands don't work within transactions. The other reason
599is that pysqlite needs to keep track of the transaction state (if a transaction
600is active or not).
601
602You can control which kind of "BEGIN" statements pysqlite implicitly executes
603(or none at all) via the \var{isolation_level} parameter to the
604\function{connect} call, or via the \member{isolation_level} property of
605connections.
606
607If you want \strong{autocommit mode}, then set \member{isolation_level} to None.
608
Andrew M. Kuchling06c5c8a2006-06-08 11:56:44 +0000609Otherwise leave it at its default, which will result in a plain "BEGIN"
Gerhard Häring2b161d92006-05-12 23:49:49 +0000610statement, or set it to one of SQLite's supported isolation levels: DEFERRED,
611IMMEDIATE or EXCLUSIVE.
612
613As the \module{sqlite3} module needs to keep track of the transaction state, you should
614not use \code{OR ROLLBACK} or \code{ON CONFLICT ROLLBACK} in your SQL. Instead,
615catch the \exception{IntegrityError} and call the \method{rollback} method of
616the connection yourself.
617
618\subsection{Using pysqlite efficiently}
619
620\subsubsection{Using shortcut methods}
621
622Using the nonstandard \method{execute}, \method{executemany} and
623\method{executescript} methods of the \class{Connection} object, your code can
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000624be written more concisely because you don't have to create the (often
625superfluous) \class{Cursor} objects explicitly. Instead, the \class{Cursor}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000626objects are created implicitly and these shortcut methods return the cursor
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000627objects. This way, you can execute a SELECT statement and iterate
Gerhard Häring2b161d92006-05-12 23:49:49 +0000628over it directly using only a single call on the \class{Connection} object.
629
630 \verbatiminput{sqlite3/shortcut_methods.py}
631
632\subsubsection{Accessing columns by name instead of by index}
633
Andrew M. Kuchlingab856872006-09-12 21:21:51 +0000634One useful feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
Gerhard Häring2b161d92006-05-12 23:49:49 +0000635designed to be used as a row factory.
636
637Rows wrapped with this class can be accessed both by index (like tuples) and
638case-insensitively by name:
639
640 \verbatiminput{sqlite3/rowclass.py}
641
642