blob: b8dd68ecc6c5a774ed5e2541dfad869e69f77d4e [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. Kuchlingf36ddda2006-09-08 13:36:57 +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. Kuchlingf36ddda2006-09-08 13:36:57 +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. Kuchling9cd00362006-09-08 14:03:19 +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)""")
Neal Norwitzea84b812007-06-17 18:49:42 +000045
46# Save (commit) the changes
47conn.commit()
48
49# We can also close the cursor if we are done with it
50c.close()
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000051\end{verbatim}
52
53Usually your SQL operations will need to use values from Python
54variables. You shouldn't assemble your query using Python's string
55operations because doing so is insecure; it makes your program
56vulnerable to an SQL injection attack.
57
Andrew M. Kuchlinge275d3d2006-06-07 17:04:01 +000058Instead, use the DB-API's parameter substitution. Put \samp{?} as a
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000059placeholder wherever you want to use a value, and then provide a tuple
60of values as the second argument to the cursor's \method{execute()}
Andrew M. Kuchlinge275d3d2006-06-07 17:04:01 +000061method. (Other database modules may use a different placeholder,
62such as \samp{\%s} or \samp{:1}.) For example:
Andrew M. Kuchling12238d72006-06-07 13:55:33 +000063
64\begin{verbatim}
65# Never do this -- insecure!
66symbol = 'IBM'
67c.execute("... where symbol = '%s'" % symbol)
68
69# Do this instead
70t = (symbol,)
71c.execute('select * from stocks where symbol=?', t)
72
73# Larger example
74for t in (('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
75 ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
76 ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
77 ):
78 c.execute('insert into stocks values (?,?,?,?,?)', t)
79\end{verbatim}
80
81To retrieve data after executing a SELECT statement, you can either
82treat the cursor as an iterator, call the cursor's \method{fetchone()}
83method to retrieve a single matching row,
84or call \method{fetchall()} to get a list of the matching rows.
85
86This example uses the iterator form:
87
88\begin{verbatim}
89>>> c = conn.cursor()
90>>> c.execute('select * from stocks order by price')
91>>> for row in c:
92... print row
93...
94(u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001)
95(u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)
96(u'2006-04-06', u'SELL', u'IBM', 500, 53.0)
97(u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0)
98>>>
99\end{verbatim}
100
101\begin{seealso}
102
103\seeurl{http://www.pysqlite.org}
104{The pysqlite web page.}
105
106\seeurl{http://www.sqlite.org}
107{The SQLite web page; the documentation describes the syntax and the
108available data types for the supported SQL dialect.}
109
110\seepep{249}{Database API Specification 2.0}{PEP written by
111Marc-Andr\'e Lemburg.}
112
113\end{seealso}
114
115
Gerhard Häring2b161d92006-05-12 23:49:49 +0000116\subsection{Module functions and constants\label{sqlite3-Module-Contents}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000117
118\begin{datadesc}{PARSE_DECLTYPES}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000119This constant is meant to be used with the \var{detect_types} parameter of the
120\function{connect} function.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000121
Gerhard Häring2b161d92006-05-12 23:49:49 +0000122Setting it makes the \module{sqlite3} module parse the declared type for each column it
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000123returns. It will parse out the first word of the declared type, i. e. for
124"integer primary key", it will parse out "integer". Then for that column, it
Gerhard Häring2b161d92006-05-12 23:49:49 +0000125will look into the converters dictionary and use the converter function
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000126registered for that type there. Converter names are case-sensitive!
127\end{datadesc}
128
129
130\begin{datadesc}{PARSE_COLNAMES}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000131This constant is meant to be used with the \var{detect_types} parameter of the
132\function{connect} function.
133
134Setting this makes the SQLite interface parse the column name for each column
135it returns. It will look for a string formed [mytype] in there, and then
136decide that 'mytype' is the type of the column. It will try to find an entry of
137'mytype' in the converters dictionary and then use the converter function found
138there to return the value. The column name found in \member{cursor.description} is only
139the first word of the column name, i. e. if you use something like
140\code{'as "x [datetime]"'} in your SQL, then we will parse out everything until the
141first blank for the column name: the column name would simply be "x".
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000142\end{datadesc}
143
Gerhard Häring2b161d92006-05-12 23:49:49 +0000144\begin{funcdesc}{connect}{database\optional{, timeout, isolation_level, detect_types, factory}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000145Opens a connection to the SQLite database file \var{database}. You can use
146\code{":memory:"} to open a database connection to a database that resides in
147RAM instead of on disk.
148
149When a database is accessed by multiple connections, and one of the processes
150modifies the database, the SQLite database is locked until that transaction is
151committed. The \var{timeout} parameter specifies how long the connection should
152wait for the lock to go away until raising an exception. The default for the
153timeout parameter is 5.0 (five seconds).
154
Georg Brandl44850ea2006-09-14 05:05:42 +0000155For the \var{isolation_level} parameter, please see the \member{isolation_level}
156property of \class{Connection} objects in section~\ref{sqlite3-Connection-IsolationLevel}.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000157
158SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
159you want to use other types, like you have to add support for them yourself.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000160The \var{detect_types} parameter and the using custom \strong{converters} registered with
161the module-level \function{register_converter} function allow you to easily do that.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000162
163\var{detect_types} defaults to 0 (i. e. off, no type detection), you can set it
Gerhard Häring2b161d92006-05-12 23:49:49 +0000164to any combination of \constant{PARSE_DECLTYPES} and \constant{PARSE_COLNAMES} to turn type
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000165detection on.
166
Gerhard Häring2b161d92006-05-12 23:49:49 +0000167By default, the \module{sqlite3} module uses its \class{Connection} class for the
168connect call. You can, however, subclass the \class{Connection} class and make
169\function{connect} use your class instead by providing your class for the
170\var{factory} parameter.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000171
Gerhard Häring2b161d92006-05-12 23:49:49 +0000172Consult the section \ref{sqlite3-Types} of this manual for details.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000173
Gerhard Häring2b161d92006-05-12 23:49:49 +0000174The \module{sqlite3} module internally uses a statement cache to avoid SQL parsing
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000175overhead. If you want to explicitly set the number of statements that are
176cached for the connection, you can set the \var{cached_statements} parameter.
177The currently implemented default is to cache 100 statements.
178\end{funcdesc}
179
180\begin{funcdesc}{register_converter}{typename, callable}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000181Registers a callable to convert a bytestring from the database into a custom
182Python type. The callable will be invoked for all database values that are of
Gerhard Häring2b161d92006-05-12 23:49:49 +0000183the type \var{typename}. Confer the parameter \var{detect_types} of the
184\function{connect} function for how the type detection works. Note that the case of
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000185\var{typename} and the name of the type in your query must match!
186\end{funcdesc}
187
188\begin{funcdesc}{register_adapter}{type, callable}
189Registers a callable to convert the custom Python type \var{type} into one of
190SQLite's supported types. The callable \var{callable} accepts as single
191parameter the Python value, and must return a value of the following types:
192int, long, float, str (UTF-8 encoded), unicode or buffer.
193\end{funcdesc}
194
Gerhard Häring2b161d92006-05-12 23:49:49 +0000195\begin{funcdesc}{complete_statement}{sql}
Andrew M. Kuchlingaa4135a2006-12-18 17:13:10 +0000196Returns \constant{True} if the string \var{sql} contains one or more complete SQL
197statements terminated by semicolons. It does not verify that the SQL is
198syntactically correct, only that there are no unclosed string literals and the
Gerhard Häring2b161d92006-05-12 23:49:49 +0000199statement is terminated by a semicolon.
200
Andrew M. Kuchlingaa4135a2006-12-18 17:13:10 +0000201This can be used to build a shell for SQLite, as in the following example:
Gerhard Häring2b161d92006-05-12 23:49:49 +0000202
203 \verbatiminput{sqlite3/complete_statement.py}
204\end{funcdesc}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000205
Georg Brandl44850ea2006-09-14 05:05:42 +0000206\begin{funcdesc}{enable_callback_tracebacks}{flag}
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000207By default you will not get any tracebacks in user-defined functions,
208aggregates, converters, authorizer callbacks etc. If you want to debug them,
209you can call this function with \var{flag} as True. Afterwards, you will get
210tracebacks from callbacks on \code{sys.stderr}. Use \constant{False} to disable
211the feature again.
212\end{funcdesc}
213
Fred Drake6550f032006-05-01 06:25:58 +0000214\subsection{Connection Objects \label{sqlite3-Connection-Objects}}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000215
216A \class{Connection} instance has the following attributes and methods:
217
Gerhard Häring2b161d92006-05-12 23:49:49 +0000218\label{sqlite3-Connection-IsolationLevel}
Fred Drake6550f032006-05-01 06:25:58 +0000219\begin{memberdesc}{isolation_level}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000220 Get or set the current isolation level. None for autocommit mode or one of
Georg Brandl44850ea2006-09-14 05:05:42 +0000221 "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See ``Controlling Transactions'',
222 section~\ref{sqlite3-Controlling-Transactions}, for a more detailed explanation.
Fred Drake6550f032006-05-01 06:25:58 +0000223\end{memberdesc}
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000224
225\begin{methoddesc}{cursor}{\optional{cursorClass}}
Fred Drake6550f032006-05-01 06:25:58 +0000226 The cursor method accepts a single optional parameter \var{cursorClass}.
Georg Brandl44850ea2006-09-14 05:05:42 +0000227 If supplied, this must be a custom cursor class that extends
228 \class{sqlite3.Cursor}.
Gerhard Häringeb2e1922006-04-29 23:12:41 +0000229\end{methoddesc}
230
Gerhard Häring82560eb2006-05-01 15:14:48 +0000231\begin{methoddesc}{execute}{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{execute} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000234parameters given.
235\end{methoddesc}
236
237\begin{methoddesc}{executemany}{sql, \optional{parameters}}
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{executemany} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000240parameters given.
241\end{methoddesc}
242
243\begin{methoddesc}{executescript}{sql_script}
244This is a nonstandard shortcut that creates an intermediate cursor object by
Gerhard Häring2b161d92006-05-12 23:49:49 +0000245calling the cursor method, then calls the cursor's \method{executescript} method with the
Gerhard Häring82560eb2006-05-01 15:14:48 +0000246parameters given.
247\end{methoddesc}
248
Gerhard Häring2b161d92006-05-12 23:49:49 +0000249\begin{methoddesc}{create_function}{name, num_params, func}
250
251Creates a user-defined function that you can later use from within SQL
252statements under the function name \var{name}. \var{num_params} is the number
253of parameters the function accepts, and \var{func} is a Python callable that is
Georg Brandl44850ea2006-09-14 05:05:42 +0000254called as the SQL function.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000255
256The function can return any of the types supported by SQLite: unicode, str,
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000257int, long, float, buffer and None.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000258
259Example:
260
261 \verbatiminput{sqlite3/md5func.py}
262\end{methoddesc}
263
264\begin{methoddesc}{create_aggregate}{name, num_params, aggregate_class}
265
266Creates a user-defined aggregate function.
267
268The aggregate class must implement a \code{step} method, which accepts the
269number of parameters \var{num_params}, and a \code{finalize} method which
270will return the final result of the aggregate.
271
272The \code{finalize} method can return any of the types supported by SQLite:
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000273unicode, str, int, long, float, buffer and None.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000274
275Example:
276
277 \verbatiminput{sqlite3/mysumaggr.py}
278\end{methoddesc}
279
280\begin{methoddesc}{create_collation}{name, callable}
281
282Creates a collation with the specified \var{name} and \var{callable}. The
283callable will be passed two string arguments. It should return -1 if the first
Georg Brandl44850ea2006-09-14 05:05:42 +0000284is ordered lower than the second, 0 if they are ordered equal and 1 if the
Gerhard Häring2b161d92006-05-12 23:49:49 +0000285first is ordered higher than the second. Note that this controls sorting
286(ORDER BY in SQL) so your comparisons don't affect other SQL operations.
287
288Note that the callable will get its parameters as Python bytestrings, which
289will normally be encoded in UTF-8.
290
291The following example shows a custom collation that sorts "the wrong way":
292
293 \verbatiminput{sqlite3/collation_reverse.py}
294
295To remove a collation, call \code{create_collation} with None as callable:
296
297\begin{verbatim}
298 con.create_collation("reverse", None)
299\end{verbatim}
300\end{methoddesc}
301
Gerhard Häring5d7c2902006-06-13 22:53:48 +0000302\begin{methoddesc}{interrupt}{}
303
304You can call this method from a different thread to abort any queries that
305might be executing on the connection. The query will then abort and the caller
306will get an exception.
307\end{methoddesc}
308
309\begin{methoddesc}{set_authorizer}{authorizer_callback}
310
311This routine registers a callback. The callback is invoked for each attempt to
312access a column of a table in the database. The callback should return
313\constant{SQLITE_OK} if access is allowed, \constant{SQLITE_DENY} if the entire
314SQL statement should be aborted with an error and \constant{SQLITE_IGNORE} if
315the column should be treated as a NULL value. These constants are available in
316the \module{sqlite3} module.
317
318The first argument to the callback signifies what kind of operation is to be
319authorized. The second and third argument will be arguments or \constant{None}
320depending on the first argument. The 4th argument is the name of the database
321("main", "temp", etc.) if applicable. The 5th argument is the name of the
322inner-most trigger or view that is responsible for the access attempt or
323\constant{None} if this access attempt is directly from input SQL code.
324
325Please consult the SQLite documentation about the possible values for the first
326argument and the meaning of the second and third argument depending on the
327first one. All necessary constants are available in the \module{sqlite3}
328module.
329\end{methoddesc}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000330
Gerhard Häring82560eb2006-05-01 15:14:48 +0000331\begin{memberdesc}{row_factory}
332 You can change this attribute to a callable that accepts the cursor and
Georg Brandl44850ea2006-09-14 05:05:42 +0000333 the original row as a tuple and will return the real result row. This
334 way, you can implement more advanced ways of returning results, such
335 as returning an object that can also access columns by name.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000336
337 Example:
338
339 \verbatiminput{sqlite3/row_factory.py}
340
Georg Brandl44850ea2006-09-14 05:05:42 +0000341 If returning a tuple doesn't suffice and you want name-based
Gerhard Häring82560eb2006-05-01 15:14:48 +0000342 access to columns, you should consider setting \member{row_factory} to the
Georg Brandl44850ea2006-09-14 05:05:42 +0000343 highly-optimized \class{sqlite3.Row} type. \class{Row} provides both
Gerhard Häring82560eb2006-05-01 15:14:48 +0000344 index-based and case-insensitive name-based access to columns with almost
Georg Brandl44850ea2006-09-14 05:05:42 +0000345 no memory overhead. It will probably be better than your own custom
346 dictionary-based approach or even a db_row based solution.
347 % XXX what's a db_row-based solution?
Gerhard Häring82560eb2006-05-01 15:14:48 +0000348\end{memberdesc}
349
350\begin{memberdesc}{text_factory}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000351 Using this attribute you can control what objects are returned for the
352 TEXT data type. By default, this attribute is set to \class{unicode} and
353 the \module{sqlite3} module will return Unicode objects for TEXT. If you want to return
354 bytestrings instead, you can set it to \class{str}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000355
356 For efficiency reasons, there's also a way to return Unicode objects only
357 for non-ASCII data, and bytestrings otherwise. To activate it, set this
Gerhard Häring2b161d92006-05-12 23:49:49 +0000358 attribute to \constant{sqlite3.OptimizedUnicode}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000359
360 You can also set it to any other callable that accepts a single bytestring
Georg Brandl44850ea2006-09-14 05:05:42 +0000361 parameter and returns the resulting object.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000362
363 See the following example code for illustration:
364
365 \verbatiminput{sqlite3/text_factory.py}
366\end{memberdesc}
367
368\begin{memberdesc}{total_changes}
Georg Brandl44850ea2006-09-14 05:05:42 +0000369 Returns the total number of database rows that have been modified, inserted,
Gerhard Häring82560eb2006-05-01 15:14:48 +0000370 or deleted since the database connection was opened.
371\end{memberdesc}
372
373
374
375
376
Gerhard Häring2b161d92006-05-12 23:49:49 +0000377\subsection{Cursor Objects \label{sqlite3-Cursor-Objects}}
Gerhard Häring82560eb2006-05-01 15:14:48 +0000378
379A \class{Cursor} instance has the following attributes and methods:
380
381\begin{methoddesc}{execute}{sql, \optional{parameters}}
382
383Executes a SQL statement. The SQL statement may be parametrized (i. e.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000384placeholders instead of SQL literals). The \module{sqlite3} module supports two kinds of
Gerhard Häring82560eb2006-05-01 15:14:48 +0000385placeholders: question marks (qmark style) and named placeholders (named
386style).
387
388This example shows how to use parameters with qmark style:
389
390 \verbatiminput{sqlite3/execute_1.py}
391
392This example shows how to use the named style:
393
394 \verbatiminput{sqlite3/execute_2.py}
395
Georg Brandl44850ea2006-09-14 05:05:42 +0000396 \method{execute()} will only execute a single SQL statement. If you try to
Gerhard Häring82560eb2006-05-01 15:14:48 +0000397 execute more than one statement with it, it will raise a Warning. Use
Georg Brandl44850ea2006-09-14 05:05:42 +0000398 \method{executescript()} if you want to execute multiple SQL statements with one
Gerhard Häring82560eb2006-05-01 15:14:48 +0000399 call.
400\end{methoddesc}
401
402
403\begin{methoddesc}{executemany}{sql, seq_of_parameters}
404Executes a SQL command against all parameter sequences or mappings found in the
405sequence \var{sql}. The \module{sqlite3} module also allows
Georg Brandl44850ea2006-09-14 05:05:42 +0000406using an iterator yielding parameters instead of a sequence.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000407
408\verbatiminput{sqlite3/executemany_1.py}
409
410Here's a shorter example using a generator:
411
412\verbatiminput{sqlite3/executemany_2.py}
413\end{methoddesc}
414
415\begin{methoddesc}{executescript}{sql_script}
416
417This is a nonstandard convenience method for executing multiple SQL statements
Georg Brandl44850ea2006-09-14 05:05:42 +0000418at once. It issues a COMMIT statement first, then executes the SQL script it
Gerhard Häring82560eb2006-05-01 15:14:48 +0000419gets as a parameter.
420
421\var{sql_script} can be a bytestring or a Unicode string.
422
423Example:
424
425\verbatiminput{sqlite3/executescript.py}
426\end{methoddesc}
427
428\begin{memberdesc}{rowcount}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000429 Although the \class{Cursor} class of the \module{sqlite3} module implements this
Gerhard Häring82560eb2006-05-01 15:14:48 +0000430 attribute, the database engine's own support for the determination of "rows
431 affected"/"rows selected" is quirky.
432
433 For \code{SELECT} statements, \member{rowcount} is always None because we cannot
434 determine the number of rows a query produced until all rows were fetched.
435
436 For \code{DELETE} statements, SQLite reports \member{rowcount} as 0 if you make a
437 \code{DELETE FROM table} without any condition.
438
Gerhard Häring2b161d92006-05-12 23:49:49 +0000439 For \method{executemany} statements, the number of modifications are summed
440 up into \member{rowcount}.
Gerhard Häring82560eb2006-05-01 15:14:48 +0000441
442 As required by the Python DB API Spec, the \member{rowcount} attribute "is -1
443 in case no executeXX() has been performed on the cursor or the rowcount
444 of the last operation is not determinable by the interface".
445\end{memberdesc}
446
Gerhard Häring2b161d92006-05-12 23:49:49 +0000447\subsection{SQLite and Python types\label{sqlite3-Types}}
448
449\subsubsection{Introduction}
450
451SQLite natively supports the following types: NULL, INTEGER, REAL, TEXT, BLOB.
452
453The following Python types can thus be sent to SQLite without any problem:
454
455\begin{tableii} {c|l}{code}{Python type}{SQLite type}
456\lineii{None}{NULL}
457\lineii{int}{INTEGER}
458\lineii{long}{INTEGER}
459\lineii{float}{REAL}
460\lineii{str (UTF8-encoded)}{TEXT}
461\lineii{unicode}{TEXT}
462\lineii{buffer}{BLOB}
463\end{tableii}
464
465This is how SQLite types are converted to Python types by default:
466
467\begin{tableii} {c|l}{code}{SQLite type}{Python type}
468\lineii{NULL}{None}
469\lineii{INTEGER}{int or long, depending on size}
470\lineii{REAL}{float}
471\lineii{TEXT}{depends on text_factory, unicode by default}
472\lineii{BLOB}{buffer}
473\end{tableii}
474
Georg Brandl44850ea2006-09-14 05:05:42 +0000475The type system of the \module{sqlite3} module is extensible in two ways: you can store
Gerhard Häring2b161d92006-05-12 23:49:49 +0000476additional Python types in a SQLite database via object adaptation, and you can
477let the \module{sqlite3} module convert SQLite types to different Python types via
478converters.
479
480\subsubsection{Using adapters to store additional Python types in SQLite databases}
481
Georg Brandl44850ea2006-09-14 05:05:42 +0000482As described before, SQLite supports only a limited set of types natively. To
Gerhard Häring2b161d92006-05-12 23:49:49 +0000483use other Python types with SQLite, you must \strong{adapt} them to one of the sqlite3
Georg Brandl44850ea2006-09-14 05:05:42 +0000484module's supported types for SQLite: one of NoneType, int, long, float,
Gerhard Häring2b161d92006-05-12 23:49:49 +0000485str, unicode, buffer.
486
Georg Brandl44850ea2006-09-14 05:05:42 +0000487The \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 +0000488
489There are two ways to enable the \module{sqlite3} module to adapt a custom Python type
490to one of the supported ones.
491
492\paragraph{Letting your object adapt itself}
493
494This is a good approach if you write the class yourself. Let's suppose you have
495a class like this:
496
497\begin{verbatim}
498class Point(object):
499 def __init__(self, x, y):
500 self.x, self.y = x, y
501\end{verbatim}
502
Georg Brandl44850ea2006-09-14 05:05:42 +0000503Now you want to store the point in a single SQLite column. First you'll have to
504choose one of the supported types first to be used for representing the point.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000505Let's just use str and separate the coordinates using a semicolon. Then you
506need to give your class a method \code{__conform__(self, protocol)} which must
507return the converted value. The parameter \var{protocol} will be
508\class{PrepareProtocol}.
509
510\verbatiminput{sqlite3/adapter_point_1.py}
511
512\paragraph{Registering an adapter callable}
513
514The other possibility is to create a function that converts the type to the
515string representation and register the function with \method{register_adapter}.
516
Gerhard Häring2b161d92006-05-12 23:49:49 +0000517\begin{notice}
518The type/class to adapt must be a new-style class, i. e. it must have
519\class{object} as one of its bases.
520\end{notice}
521
Georg Brandl44850ea2006-09-14 05:05:42 +0000522 \verbatiminput{sqlite3/adapter_point_2.py}
523
Fred Drakee0d4aec2006-07-30 03:03:43 +0000524The \module{sqlite3} module has two default adapters for Python's built-in
525\class{datetime.date} and \class{datetime.datetime} types. Now let's suppose
526we want to store \class{datetime.datetime} objects not in ISO representation,
527but as a \UNIX{} timestamp.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000528
529 \verbatiminput{sqlite3/adapter_datetime.py}
530
531\subsubsection{Converting SQLite values to custom Python types}
532
Georg Brandl44850ea2006-09-14 05:05:42 +0000533Writing an adapter lets you send custom Python types to SQLite.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000534But to make it really useful we need to make the Python to SQLite to Python
Georg Brandl44850ea2006-09-14 05:05:42 +0000535roundtrip work.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000536
537Enter converters.
538
Georg Brandl44850ea2006-09-14 05:05:42 +0000539Let's go back to the \class{Point} class. We stored the x and y
540coordinates separated via semicolons as strings in SQLite.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000541
Georg Brandl44850ea2006-09-14 05:05:42 +0000542First, we'll define a converter function that accepts the string as a
543parameter and constructs a \class{Point} object from it.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000544
545\begin{notice}
546Converter functions \strong{always} get called with a string, no matter
547under which data type you sent the value to SQLite.
548\end{notice}
549
550\begin{notice}
551Converter names are looked up in a case-sensitive manner.
552\end{notice}
553
554
555\begin{verbatim}
556 def convert_point(s):
557 x, y = map(float, s.split(";"))
558 return Point(x, y)
559\end{verbatim}
560
561Now you need to make the \module{sqlite3} module know that what you select from the
562database is actually a point. There are two ways of doing this:
563
564\begin{itemize}
565 \item Implicitly via the declared type
566 \item Explicitly via the column name
567\end{itemize}
568
Georg Brandl44850ea2006-09-14 05:05:42 +0000569Both ways are described in ``Module Constants'', section~\ref{sqlite3-Module-Contents}, in
570the entries for the constants \constant{PARSE_DECLTYPES} and
571\constant{PARSE_COLNAMES}.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000572
573
Georg Brandl44850ea2006-09-14 05:05:42 +0000574The following example illustrates both approaches.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000575
576 \verbatiminput{sqlite3/converter_point.py}
577
578\subsubsection{Default adapters and converters}
579
580There are default adapters for the date and datetime types in the datetime
581module. They will be sent as ISO dates/ISO timestamps to SQLite.
582
Georg Brandl44850ea2006-09-14 05:05:42 +0000583The default converters are registered under the name "date" for \class{datetime.date}
584and under the name "timestamp" for \class{datetime.datetime}.
Gerhard Häring2b161d92006-05-12 23:49:49 +0000585
586This way, you can use date/timestamps from Python without any additional
587fiddling in most cases. The format of the adapters is also compatible with the
588experimental SQLite date/time functions.
589
590The following example demonstrates this.
591
592 \verbatiminput{sqlite3/pysqlite_datetime.py}
593
594\subsection{Controlling Transactions \label{sqlite3-Controlling-Transactions}}
595
Georg Brandl44850ea2006-09-14 05:05:42 +0000596By default, the \module{sqlite3} module opens transactions implicitly before a Data Modification Language (DML)
597statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
598before a non-DML, non-query statement (i. e. anything other than
Gerhard Häring2b161d92006-05-12 23:49:49 +0000599SELECT/INSERT/UPDATE/DELETE/REPLACE).
600
Georg Brandl44850ea2006-09-14 05:05:42 +0000601So if you are within a transaction and issue a command like \code{CREATE TABLE
Gerhard Häring2b161d92006-05-12 23:49:49 +0000602...}, \code{VACUUM}, \code{PRAGMA}, the \module{sqlite3} module will commit implicitly
603before executing that command. There are two reasons for doing that. The first
604is that some of these commands don't work within transactions. The other reason
605is that pysqlite needs to keep track of the transaction state (if a transaction
606is active or not).
607
608You can control which kind of "BEGIN" statements pysqlite implicitly executes
609(or none at all) via the \var{isolation_level} parameter to the
610\function{connect} call, or via the \member{isolation_level} property of
611connections.
612
613If you want \strong{autocommit mode}, then set \member{isolation_level} to None.
614
Andrew M. Kuchling06c5c8a2006-06-08 11:56:44 +0000615Otherwise leave it at its default, which will result in a plain "BEGIN"
Gerhard Häring2b161d92006-05-12 23:49:49 +0000616statement, or set it to one of SQLite's supported isolation levels: DEFERRED,
617IMMEDIATE or EXCLUSIVE.
618
619As the \module{sqlite3} module needs to keep track of the transaction state, you should
620not use \code{OR ROLLBACK} or \code{ON CONFLICT ROLLBACK} in your SQL. Instead,
621catch the \exception{IntegrityError} and call the \method{rollback} method of
622the connection yourself.
623
624\subsection{Using pysqlite efficiently}
625
626\subsubsection{Using shortcut methods}
627
628Using the nonstandard \method{execute}, \method{executemany} and
629\method{executescript} methods of the \class{Connection} object, your code can
Georg Brandl44850ea2006-09-14 05:05:42 +0000630be written more concisely because you don't have to create the (often
631superfluous) \class{Cursor} objects explicitly. Instead, the \class{Cursor}
Gerhard Häring2b161d92006-05-12 23:49:49 +0000632objects are created implicitly and these shortcut methods return the cursor
Georg Brandl44850ea2006-09-14 05:05:42 +0000633objects. This way, you can execute a SELECT statement and iterate
Gerhard Häring2b161d92006-05-12 23:49:49 +0000634over it directly using only a single call on the \class{Connection} object.
635
636 \verbatiminput{sqlite3/shortcut_methods.py}
637
638\subsubsection{Accessing columns by name instead of by index}
639
Georg Brandl44850ea2006-09-14 05:05:42 +0000640One useful feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
Gerhard Häring2b161d92006-05-12 23:49:49 +0000641designed to be used as a row factory.
642
643Rows wrapped with this class can be accessed both by index (like tuples) and
644case-insensitively by name:
645
646 \verbatiminput{sqlite3/rowclass.py}
647
648