mirror of
https://github.com/python/cpython.git
synced 2024-11-25 10:54:51 +08:00
9afde1c0de
Merged revisions 58221-58741 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r58221 | georg.brandl | 2007-09-20 10:57:59 -0700 (Thu, 20 Sep 2007) | 2 lines Patch #1181: add os.environ.clear() method. ........ r58225 | sean.reifschneider | 2007-09-20 23:33:28 -0700 (Thu, 20 Sep 2007) | 3 lines Issue1704287: "make install" fails unless you do "make" first. Make oldsharedmods and sharedmods in "libinstall". ........ r58232 | guido.van.rossum | 2007-09-22 13:18:03 -0700 (Sat, 22 Sep 2007) | 4 lines Patch # 188 by Philip Jenvey. Make tell() mark CRLF as a newline. With unit test. ........ r58242 | georg.brandl | 2007-09-24 10:55:47 -0700 (Mon, 24 Sep 2007) | 2 lines Fix typo and double word. ........ r58245 | georg.brandl | 2007-09-24 10:59:28 -0700 (Mon, 24 Sep 2007) | 2 lines #1196: document default radix for int(). ........ r58247 | georg.brandl | 2007-09-24 11:08:24 -0700 (Mon, 24 Sep 2007) | 2 lines #1177: accept 2xx responses for https too, not only http. ........ r58249 | andrew.kuchling | 2007-09-24 16:45:51 -0700 (Mon, 24 Sep 2007) | 1 line Remove stray odd character; grammar fix ........ r58250 | andrew.kuchling | 2007-09-24 16:46:28 -0700 (Mon, 24 Sep 2007) | 1 line Typo fix ........ r58251 | andrew.kuchling | 2007-09-24 17:09:42 -0700 (Mon, 24 Sep 2007) | 1 line Add various items ........ r58268 | vinay.sajip | 2007-09-26 22:34:45 -0700 (Wed, 26 Sep 2007) | 1 line Change to flush and close logic to fix #1760556. ........ r58269 | vinay.sajip | 2007-09-26 22:38:51 -0700 (Wed, 26 Sep 2007) | 1 line Change to basicConfig() to fix #1021. ........ r58270 | georg.brandl | 2007-09-26 23:26:58 -0700 (Wed, 26 Sep 2007) | 2 lines #1208: document match object's boolean value. ........ r58271 | vinay.sajip | 2007-09-26 23:56:13 -0700 (Wed, 26 Sep 2007) | 1 line Minor date change. ........ r58272 | vinay.sajip | 2007-09-27 00:35:10 -0700 (Thu, 27 Sep 2007) | 1 line Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time. ........ r58288 | brett.cannon | 2007-09-30 12:45:10 -0700 (Sun, 30 Sep 2007) | 9 lines tuple.__repr__ did not consider a reference loop as it is not possible from Python code; but it is possible from C. object.__str__ had the issue of not expecting a type to doing something within it's tp_str implementation that could trigger an infinite recursion, but it could in C code.. Both found thanks to BaseException and how it handles its repr. Closes issue #1686386. Thanks to Thomas Herve for taking an initial stab at coming up with a solution. ........ r58289 | brett.cannon | 2007-09-30 13:37:19 -0700 (Sun, 30 Sep 2007) | 3 lines Fix error introduced by r58288; if a tuple is length 0 return its repr and don't worry about any self-referring tuples. ........ r58294 | facundo.batista | 2007-10-02 10:01:24 -0700 (Tue, 02 Oct 2007) | 11 lines Made the various is_* operations return booleans. This was discussed with Cawlishaw by mail, and he basically confirmed that to these is_* operations, there's no need to return Decimal(0) and Decimal(1) if the language supports the False and True booleans. Also added a few tests for the these functions in extra.decTest, since they are mostly untested (apart from the doctests). Thanks Mark Dickinson ........ r58295 | facundo.batista | 2007-10-02 11:21:18 -0700 (Tue, 02 Oct 2007) | 4 lines Added a class to store the digits of log(10), so that they can be made available when necessary without recomputing. Thanks Mark Dickinson ........ r58299 | mark.summerfield | 2007-10-03 01:53:21 -0700 (Wed, 03 Oct 2007) | 4 lines Added note in footnote about string comparisons about unicodedata.normalize(). ........ r58304 | raymond.hettinger | 2007-10-03 14:18:11 -0700 (Wed, 03 Oct 2007) | 1 line enumerate() is no longer bounded to using sequences shorter than LONG_MAX. The possibility of overflow was sending some newsgroup posters into a tizzy. ........ r58305 | raymond.hettinger | 2007-10-03 17:20:27 -0700 (Wed, 03 Oct 2007) | 1 line itertools.count() no longer limited to sys.maxint. ........ r58306 | kurt.kaiser | 2007-10-03 18:49:54 -0700 (Wed, 03 Oct 2007) | 3 lines Assume that the user knows when he wants to end the line; don't insert something he didn't select or complete. ........ r58307 | kurt.kaiser | 2007-10-03 19:07:50 -0700 (Wed, 03 Oct 2007) | 2 lines Remove unused theme that was causing a fault in p3k. ........ r58308 | kurt.kaiser | 2007-10-03 19:09:17 -0700 (Wed, 03 Oct 2007) | 2 lines Clean up EditorWindow close. ........ r58309 | kurt.kaiser | 2007-10-03 19:53:07 -0700 (Wed, 03 Oct 2007) | 7 lines textView cleanup. Patch 1718043 Tal Einat. M idlelib/EditorWindow.py M idlelib/aboutDialog.py M idlelib/textView.py M idlelib/NEWS.txt ........ r58310 | kurt.kaiser | 2007-10-03 20:11:12 -0700 (Wed, 03 Oct 2007) | 3 lines configDialog cleanup. Patch 1730217 Tal Einat. ........ r58311 | neal.norwitz | 2007-10-03 23:00:48 -0700 (Wed, 03 Oct 2007) | 4 lines Coverity #151: Remove deadcode. All this code already exists above starting at line 653. ........ r58325 | fred.drake | 2007-10-04 19:46:12 -0700 (Thu, 04 Oct 2007) | 1 line wrap lines to <80 characters before fixing errors ........ r58326 | raymond.hettinger | 2007-10-04 19:47:07 -0700 (Thu, 04 Oct 2007) | 6 lines Add __asdict__() to NamedTuple and refine the docs. Add maxlen support to deque() and fixup docs. Partially fix __reduce__(). The None as a third arg was no longer supported. Still needs work on __reduce__() to handle recursive inputs. ........ r58327 | fred.drake | 2007-10-04 19:48:32 -0700 (Thu, 04 Oct 2007) | 3 lines move descriptions of ac_(in|out)_buffer_size to the right place http://bugs.python.org/issue1053 ........ r58329 | neal.norwitz | 2007-10-04 20:39:17 -0700 (Thu, 04 Oct 2007) | 3 lines dict could be NULL, so we need to XDECREF. Fix a compiler warning about passing a PyTypeObject* instead of PyObject*. ........ r58330 | neal.norwitz | 2007-10-04 20:41:19 -0700 (Thu, 04 Oct 2007) | 2 lines Fix Coverity #158: Check the correct variable. ........ r58332 | neal.norwitz | 2007-10-04 22:01:38 -0700 (Thu, 04 Oct 2007) | 7 lines Fix Coverity #159. This code was broken if save() returned a negative number since i contained a boolean value and then we compared i < 0 which should never be true. Will backport (assuming it's necessary) ........ r58334 | neal.norwitz | 2007-10-04 22:29:17 -0700 (Thu, 04 Oct 2007) | 1 line Add a note about fixing some more warnings found by Coverity. ........ r58338 | raymond.hettinger | 2007-10-05 12:07:31 -0700 (Fri, 05 Oct 2007) | 1 line Restore BEGIN/END THREADS macros which were squashed in the previous checkin ........ r58343 | gregory.p.smith | 2007-10-06 00:48:10 -0700 (Sat, 06 Oct 2007) | 3 lines Stab in the dark attempt to fix the test_bsddb3 failure on sparc and S-390 ubuntu buildbots. ........ r58344 | gregory.p.smith | 2007-10-06 00:51:59 -0700 (Sat, 06 Oct 2007) | 2 lines Allows BerkeleyDB 4.6.x >= 4.6.21 for the bsddb module. ........ r58348 | gregory.p.smith | 2007-10-06 08:47:37 -0700 (Sat, 06 Oct 2007) | 3 lines Use the host the author likely meant in the first place. pop.gmail.com is reliable. gmail.org is someones personal domain. ........ r58351 | neal.norwitz | 2007-10-06 12:16:28 -0700 (Sat, 06 Oct 2007) | 3 lines Ensure that this test will pass even if another test left an unwritable TESTFN. Also use the safe unlink in test_support instead of rolling our own here. ........ r58368 | georg.brandl | 2007-10-08 00:50:24 -0700 (Mon, 08 Oct 2007) | 3 lines #1123: fix the docs for the str.split(None, sep) case. Also expand a few other methods' docs, which had more info in the deprecated string module docs. ........ r58369 | georg.brandl | 2007-10-08 01:06:05 -0700 (Mon, 08 Oct 2007) | 2 lines Update docstring of sched, also remove an unused assignment. ........ r58370 | raymond.hettinger | 2007-10-08 02:14:28 -0700 (Mon, 08 Oct 2007) | 5 lines Add comments to NamedTuple code. Let the field spec be either a string or a non-string sequence (suggested by Martin Blais with use cases). Improve the error message in the case of a SyntaxError (caused by a duplicate field name). ........ r58371 | raymond.hettinger | 2007-10-08 02:56:29 -0700 (Mon, 08 Oct 2007) | 1 line Missed a line in the docs ........ r58372 | raymond.hettinger | 2007-10-08 03:11:51 -0700 (Mon, 08 Oct 2007) | 1 line Better variable names ........ r58376 | georg.brandl | 2007-10-08 07:12:47 -0700 (Mon, 08 Oct 2007) | 3 lines #1199: docs for tp_as_{number,sequence,mapping}, by Amaury Forgeot d'Arc. No need to merge this to py3k! ........ r58380 | raymond.hettinger | 2007-10-08 14:26:58 -0700 (Mon, 08 Oct 2007) | 1 line Eliminate camelcase function name ........ r58381 | andrew.kuchling | 2007-10-08 16:23:03 -0700 (Mon, 08 Oct 2007) | 1 line Eliminate camelcase function name ........ r58382 | raymond.hettinger | 2007-10-08 18:36:23 -0700 (Mon, 08 Oct 2007) | 1 line Make the error messages more specific ........ r58384 | gregory.p.smith | 2007-10-08 23:02:21 -0700 (Mon, 08 Oct 2007) | 10 lines Splits Modules/_bsddb.c up into bsddb.h and _bsddb.c and adds a C API object available as bsddb.db.api. This is based on the patch submitted by Duncan Grisby here: http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900 See this thread for additional info: http://sourceforge.net/mailarchive/forum.php?thread_name=E1GAVDK-0002rk-Iw%40apasphere.com&forum_name=pybsddb-users It also cleans up the code a little by removing some ifdef/endifs for python prior to 2.1 and for unsupported Berkeley DB <= 3.2. ........ r58385 | gregory.p.smith | 2007-10-08 23:50:43 -0700 (Mon, 08 Oct 2007) | 5 lines Fix a double free when positioning a database cursor to a non-existant string key (and probably a few other situations with string keys). This was reported with a patch as pybsddb sourceforge bug 1708868 by jjjhhhlll at gmail. ........ r58386 | gregory.p.smith | 2007-10-09 00:19:11 -0700 (Tue, 09 Oct 2007) | 3 lines Use the highest cPickle protocol in bsddb.dbshelve. This comes from sourceforge pybsddb patch 1551443 by w_barnes. ........ r58394 | gregory.p.smith | 2007-10-09 11:26:02 -0700 (Tue, 09 Oct 2007) | 2 lines remove another sleepycat reference ........ r58396 | kurt.kaiser | 2007-10-09 12:31:30 -0700 (Tue, 09 Oct 2007) | 3 lines Allow interrupt only when executing user code in subprocess Patch 1225 Tal Einat modified from IDLE-Spoon. ........ r58399 | brett.cannon | 2007-10-09 17:07:50 -0700 (Tue, 09 Oct 2007) | 5 lines Remove file-level typedefs that were inconsistently used throughout the file. Just move over to the public API names. Closes issue1238. ........ r58401 | raymond.hettinger | 2007-10-09 17:26:46 -0700 (Tue, 09 Oct 2007) | 1 line Accept Jim Jewett's api suggestion to use None instead of -1 to indicate unbounded deques. ........ r58403 | kurt.kaiser | 2007-10-09 17:55:40 -0700 (Tue, 09 Oct 2007) | 2 lines Allow cursor color change w/o restart. Patch 1725576 Tal Einat. ........ r58404 | kurt.kaiser | 2007-10-09 18:06:47 -0700 (Tue, 09 Oct 2007) | 2 lines show paste if > 80 columns. Patch 1659326 Tal Einat. ........ r58415 | thomas.heller | 2007-10-11 12:51:32 -0700 (Thu, 11 Oct 2007) | 5 lines On OS X, use os.uname() instead of gestalt.sysv(...) to get the operating system version. This allows to use ctypes when Python was configured with --disable-toolbox-glue. ........ r58419 | neal.norwitz | 2007-10-11 20:01:01 -0700 (Thu, 11 Oct 2007) | 1 line Get rid of warning about not being able to create an existing directory. ........ r58420 | neal.norwitz | 2007-10-11 20:01:30 -0700 (Thu, 11 Oct 2007) | 1 line Get rid of warnings on a bunch of platforms by using a proper prototype. ........ r58421 | neal.norwitz | 2007-10-11 20:01:54 -0700 (Thu, 11 Oct 2007) | 4 lines Get rid of compiler warning about retval being used (returned) without being initialized. (gcc warning and Coverity 202) ........ r58422 | neal.norwitz | 2007-10-11 20:03:23 -0700 (Thu, 11 Oct 2007) | 1 line Fix Coverity 168: Close the file before returning (exiting). ........ r58423 | neal.norwitz | 2007-10-11 20:04:18 -0700 (Thu, 11 Oct 2007) | 4 lines Fix Coverity 180: Don't overallocate. We don't need structs, but pointers. Also fix a memory leak. ........ r58424 | neal.norwitz | 2007-10-11 20:05:19 -0700 (Thu, 11 Oct 2007) | 5 lines Fix Coverity 185-186: If the passed in FILE is NULL, uninitialized memory would be accessed. Will backport. ........ r58425 | neal.norwitz | 2007-10-11 20:52:34 -0700 (Thu, 11 Oct 2007) | 1 line Get this module to compile with bsddb versions prior to 4.3 ........ r58430 | martin.v.loewis | 2007-10-12 01:56:52 -0700 (Fri, 12 Oct 2007) | 3 lines Bug #1216: Restore support for Visual Studio 2002. Will backport to 2.5. ........ r58433 | raymond.hettinger | 2007-10-12 10:53:11 -0700 (Fri, 12 Oct 2007) | 1 line Fix test of count.__repr__() to ignore the 'L' if the count is a long ........ r58434 | gregory.p.smith | 2007-10-12 11:44:06 -0700 (Fri, 12 Oct 2007) | 4 lines Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append was useless due to inverted logic. Also adds a test case for RECNO dbs to test_dbshelve. ........ r58445 | georg.brandl | 2007-10-13 06:20:03 -0700 (Sat, 13 Oct 2007) | 2 lines Fix email example. ........ r58450 | gregory.p.smith | 2007-10-13 16:02:05 -0700 (Sat, 13 Oct 2007) | 2 lines Fix an uncollectable reference leak in bsddb.db.DBShelf.append ........ r58453 | neal.norwitz | 2007-10-13 17:18:40 -0700 (Sat, 13 Oct 2007) | 8 lines Let the O/S supply a port if none of the default ports can be used. This should make the tests more robust at the expense of allowing tests to be sloppier by not requiring them to cleanup after themselves. (It will legitamitely help when running two test suites simultaneously or if another process is already using one of the predefined ports.) Also simplifies (slightLy) the exception handling elsewhere. ........ r58459 | neal.norwitz | 2007-10-14 11:30:21 -0700 (Sun, 14 Oct 2007) | 2 lines Don't raise a string exception, they don't work anymore. ........ r58460 | neal.norwitz | 2007-10-14 11:40:37 -0700 (Sun, 14 Oct 2007) | 1 line Use unittest for assertions ........ r58468 | armin.rigo | 2007-10-15 00:48:35 -0700 (Mon, 15 Oct 2007) | 2 lines test_bigbits was not testing what it seemed to. ........ r58471 | guido.van.rossum | 2007-10-15 08:54:11 -0700 (Mon, 15 Oct 2007) | 3 lines Change a PyErr_Print() into a PyErr_Clear(), per discussion in issue 1031213. ........ r58500 | raymond.hettinger | 2007-10-16 12:18:30 -0700 (Tue, 16 Oct 2007) | 1 line Improve error messages ........ r58506 | raymond.hettinger | 2007-10-16 14:28:32 -0700 (Tue, 16 Oct 2007) | 1 line More docs, error messages, and tests ........ r58507 | andrew.kuchling | 2007-10-16 15:58:03 -0700 (Tue, 16 Oct 2007) | 1 line Add items ........ r58508 | brett.cannon | 2007-10-16 16:24:06 -0700 (Tue, 16 Oct 2007) | 3 lines Remove ``:const:`` notation on None in parameter list. Since the markup is not rendered for parameters it just showed up as ``:const:`None` `` in the output. ........ r58509 | brett.cannon | 2007-10-16 16:26:45 -0700 (Tue, 16 Oct 2007) | 3 lines Re-order some functions whose parameters differ between PyObject and const char * so that they are next to each other. ........ r58522 | armin.rigo | 2007-10-17 11:46:37 -0700 (Wed, 17 Oct 2007) | 5 lines Fix the overflow checking of list_repeat. Introduce overflow checking into list_inplace_repeat. Backport candidate, possibly. ........ r58530 | facundo.batista | 2007-10-17 20:16:03 -0700 (Wed, 17 Oct 2007) | 7 lines Issue #1580738. When HTTPConnection reads the whole stream with read(), it closes itself. When the stream is read in several calls to read(n), it should behave in the same way if HTTPConnection knows where the end of the stream is (through self.length). Added a test case for this behaviour. ........ r58531 | facundo.batista | 2007-10-17 20:44:48 -0700 (Wed, 17 Oct 2007) | 3 lines Issue 1289, just a typo. ........ r58532 | gregory.p.smith | 2007-10-18 00:56:54 -0700 (Thu, 18 Oct 2007) | 4 lines cleanup test_dbtables to use mkdtemp. cleanup dbtables to pass txn as a keyword argument whenever possible to avoid bugs and confusion. (dbtables.py line 447 self.db.get using txn as a non-keyword was an actual bug due to this) ........ r58533 | gregory.p.smith | 2007-10-18 01:34:20 -0700 (Thu, 18 Oct 2007) | 4 lines Fix a weird bug in dbtables: if it chose a random rowid string that contained NULL bytes it would cause the database all sorts of problems in the future leading to very strange random failures and corrupt dbtables.bsdTableDb dbs. ........ r58534 | gregory.p.smith | 2007-10-18 09:32:02 -0700 (Thu, 18 Oct 2007) | 3 lines A cleaner fix than the one committed last night. Generate random rowids that do not contain null bytes. ........ r58537 | gregory.p.smith | 2007-10-18 10:17:57 -0700 (Thu, 18 Oct 2007) | 2 lines mention bsddb fixes. ........ r58538 | raymond.hettinger | 2007-10-18 14:13:06 -0700 (Thu, 18 Oct 2007) | 1 line Remove useless warning ........ r58539 | gregory.p.smith | 2007-10-19 00:31:20 -0700 (Fri, 19 Oct 2007) | 2 lines squelch the warning that this test is supposed to trigger. ........ r58542 | georg.brandl | 2007-10-19 05:32:39 -0700 (Fri, 19 Oct 2007) | 2 lines Clarify wording for apply(). ........ r58544 | mark.summerfield | 2007-10-19 05:48:17 -0700 (Fri, 19 Oct 2007) | 3 lines Added a cross-ref to each other. ........ r58545 | georg.brandl | 2007-10-19 10:38:49 -0700 (Fri, 19 Oct 2007) | 2 lines #1284: "S" means "seen", not unread. ........ r58548 | thomas.heller | 2007-10-19 11:11:41 -0700 (Fri, 19 Oct 2007) | 4 lines Fix ctypes on 32-bit systems when Python is configured --with-system-ffi. See also https://bugs.launchpad.net/bugs/72505. Ported from release25-maint branch. ........ r58550 | facundo.batista | 2007-10-19 12:25:57 -0700 (Fri, 19 Oct 2007) | 8 lines The constructor from tuple was way too permissive: it allowed bad coefficient numbers, floats in the sign, and other details that generated directly the wrong number in the best case, or triggered misfunctionality in the alorithms. Test cases added for these issues. Thanks Mark Dickinson. ........ r58559 | georg.brandl | 2007-10-20 06:22:53 -0700 (Sat, 20 Oct 2007) | 2 lines Fix code being interpreted as a target. ........ r58561 | georg.brandl | 2007-10-20 06:36:24 -0700 (Sat, 20 Oct 2007) | 2 lines Document new "cmdoption" directive. ........ r58562 | georg.brandl | 2007-10-20 08:21:22 -0700 (Sat, 20 Oct 2007) | 2 lines Make a path more Unix-standardy. ........ r58564 | georg.brandl | 2007-10-20 10:51:39 -0700 (Sat, 20 Oct 2007) | 2 lines Document new directive "envvar". ........ r58567 | georg.brandl | 2007-10-20 11:08:14 -0700 (Sat, 20 Oct 2007) | 6 lines * Add new toplevel chapter, "Using Python." (how to install, configure and setup python on different platforms -- at least in theory.) * Move the Python on Mac docs in that chapter. * Add a new chapter about the command line invocation, by stargaming. ........ r58568 | georg.brandl | 2007-10-20 11:33:20 -0700 (Sat, 20 Oct 2007) | 2 lines Change title, for now. ........ r58569 | georg.brandl | 2007-10-20 11:39:25 -0700 (Sat, 20 Oct 2007) | 2 lines Add entry to ACKS. ........ r58570 | georg.brandl | 2007-10-20 12:05:45 -0700 (Sat, 20 Oct 2007) | 2 lines Clarify -E docs. ........ r58571 | georg.brandl | 2007-10-20 12:08:36 -0700 (Sat, 20 Oct 2007) | 2 lines Even more clarification. ........ r58572 | andrew.kuchling | 2007-10-20 12:25:37 -0700 (Sat, 20 Oct 2007) | 1 line Fix protocol name ........ r58573 | andrew.kuchling | 2007-10-20 12:35:18 -0700 (Sat, 20 Oct 2007) | 1 line Various items ........ r58574 | andrew.kuchling | 2007-10-20 12:39:35 -0700 (Sat, 20 Oct 2007) | 1 line Use correct header line ........ r58576 | armin.rigo | 2007-10-21 02:14:15 -0700 (Sun, 21 Oct 2007) | 3 lines Add a crasher for the long-standing issue with closing a file while another thread uses it. ........ r58577 | georg.brandl | 2007-10-21 03:01:56 -0700 (Sun, 21 Oct 2007) | 2 lines Remove duplicate crasher. ........ r58578 | georg.brandl | 2007-10-21 03:24:20 -0700 (Sun, 21 Oct 2007) | 2 lines Unify "byte code" to "bytecode". Also sprinkle :term: markup for it. ........ r58579 | georg.brandl | 2007-10-21 03:32:54 -0700 (Sun, 21 Oct 2007) | 2 lines Add markup to new function descriptions. ........ r58580 | georg.brandl | 2007-10-21 03:45:46 -0700 (Sun, 21 Oct 2007) | 2 lines Add :term:s for descriptors. ........ r58581 | georg.brandl | 2007-10-21 03:46:24 -0700 (Sun, 21 Oct 2007) | 2 lines Unify "file-descriptor" to "file descriptor". ........ r58582 | georg.brandl | 2007-10-21 03:52:38 -0700 (Sun, 21 Oct 2007) | 2 lines Add :term: for generators. ........ r58583 | georg.brandl | 2007-10-21 05:10:28 -0700 (Sun, 21 Oct 2007) | 2 lines Add :term:s for iterator. ........ r58584 | georg.brandl | 2007-10-21 05:15:05 -0700 (Sun, 21 Oct 2007) | 2 lines Add :term:s for "new-style class". ........ r58588 | neal.norwitz | 2007-10-21 21:47:54 -0700 (Sun, 21 Oct 2007) | 1 line Add Chris Monson so he can edit PEPs. ........ r58594 | guido.van.rossum | 2007-10-22 09:27:19 -0700 (Mon, 22 Oct 2007) | 4 lines Issue #1307, patch by Derek Shockey. When "MAIL" is received without args, an exception happens instead of sending a 501 syntax error response. ........ r58598 | travis.oliphant | 2007-10-22 19:40:56 -0700 (Mon, 22 Oct 2007) | 1 line Add phuang patch from Issue 708374 which adds offset parameter to mmap module. ........ r58601 | neal.norwitz | 2007-10-22 22:44:27 -0700 (Mon, 22 Oct 2007) | 2 lines Bug #1313, fix typo (wrong variable name) in example. ........ r58609 | georg.brandl | 2007-10-23 11:21:35 -0700 (Tue, 23 Oct 2007) | 2 lines Update Pygments version from externals. ........ r58618 | guido.van.rossum | 2007-10-23 12:25:41 -0700 (Tue, 23 Oct 2007) | 3 lines Issue 1307 by Derek Shockey, fox the same bug for RCPT. Neal: please backport! ........ r58620 | raymond.hettinger | 2007-10-23 13:37:41 -0700 (Tue, 23 Oct 2007) | 1 line Shorter name for namedtuple() ........ r58621 | andrew.kuchling | 2007-10-23 13:55:47 -0700 (Tue, 23 Oct 2007) | 1 line Update name ........ r58622 | raymond.hettinger | 2007-10-23 14:23:07 -0700 (Tue, 23 Oct 2007) | 1 line Fixup news entry ........ r58623 | raymond.hettinger | 2007-10-23 18:28:33 -0700 (Tue, 23 Oct 2007) | 1 line Optimize sum() for integer and float inputs. ........ r58624 | raymond.hettinger | 2007-10-23 19:05:51 -0700 (Tue, 23 Oct 2007) | 1 line Fixup error return and add support for intermixed ints and floats/ ........ r58628 | vinay.sajip | 2007-10-24 03:47:06 -0700 (Wed, 24 Oct 2007) | 1 line Bug #1321: Fixed logic error in TimedRotatingFileHandler.__init__() ........ r58641 | facundo.batista | 2007-10-24 12:11:08 -0700 (Wed, 24 Oct 2007) | 4 lines Issue 1290. CharacterData.__repr__ was constructing a string in response that keeped having a non-ascii character. ........ r58643 | thomas.heller | 2007-10-24 12:50:45 -0700 (Wed, 24 Oct 2007) | 1 line Added unittest for calling a function with paramflags (backport from py3k branch). ........ r58645 | matthias.klose | 2007-10-24 13:00:44 -0700 (Wed, 24 Oct 2007) | 2 lines - Build using system ffi library on arm*-linux*. ........ r58651 | georg.brandl | 2007-10-24 14:40:38 -0700 (Wed, 24 Oct 2007) | 2 lines Bug #1287: make os.environ.pop() work as expected. ........ r58652 | raymond.hettinger | 2007-10-24 19:26:58 -0700 (Wed, 24 Oct 2007) | 1 line Missing DECREFs ........ r58653 | matthias.klose | 2007-10-24 23:37:24 -0700 (Wed, 24 Oct 2007) | 2 lines - Build using system ffi library on arm*-linux*, pass --with-system-ffi to CONFIG_ARGS ........ r58655 | thomas.heller | 2007-10-25 12:47:32 -0700 (Thu, 25 Oct 2007) | 2 lines ffi_type_longdouble may be already #defined. See issue 1324. ........ r58656 | kurt.kaiser | 2007-10-25 15:43:45 -0700 (Thu, 25 Oct 2007) | 3 lines Correct an ancient bug in an unused path by removing that path: register() is now idempotent. ........ r58660 | kurt.kaiser | 2007-10-25 17:10:09 -0700 (Thu, 25 Oct 2007) | 4 lines 1. Add comments to provide top-level documentation. 2. Refactor to use more descriptive names. 3. Enhance tests in main(). ........ r58675 | georg.brandl | 2007-10-26 11:30:41 -0700 (Fri, 26 Oct 2007) | 2 lines Fix new pop() method on os.environ on ignorecase-platforms. ........ r58696 | neal.norwitz | 2007-10-27 15:32:21 -0700 (Sat, 27 Oct 2007) | 1 line Update URL for Pygments. 0.8.1 is no longer available ........ r58697 | hyeshik.chang | 2007-10-28 04:19:02 -0700 (Sun, 28 Oct 2007) | 3 lines - Add support for FreeBSD 8 which is recently forked from FreeBSD 7. - Regenerate IN module for most recent maintenance tree of FreeBSD 6 and 7. ........ r58698 | hyeshik.chang | 2007-10-28 05:38:09 -0700 (Sun, 28 Oct 2007) | 2 lines Enable platform-specific tweaks for FreeBSD 8 (exactly same to FreeBSD 7's yet) ........ r58700 | kurt.kaiser | 2007-10-28 12:03:59 -0700 (Sun, 28 Oct 2007) | 2 lines Add confirmation dialog before printing. Patch 1717170 Tal Einat. ........ r58706 | guido.van.rossum | 2007-10-29 13:52:45 -0700 (Mon, 29 Oct 2007) | 3 lines Patch 1353 by Jacob Winther. Add mp4 mapping to mimetypes.py. ........ r58709 | guido.van.rossum | 2007-10-29 15:15:05 -0700 (Mon, 29 Oct 2007) | 6 lines Backport fixes for the code that decodes octal escapes (and for PyString also hex escapes) -- this was reaching beyond the end of the input string buffer, even though it is not supposed to be \0-terminated. This has no visible effect but is clearly the correct thing to do. (In 3.0 it had a visible effect after removing ob_sstate from PyString.) ........ r58710 | kurt.kaiser | 2007-10-29 19:38:54 -0700 (Mon, 29 Oct 2007) | 7 lines check in Tal Einat's update to tabpage.py Patch 1612746 M configDialog.py M NEWS.txt AM tabbedpages.py ........ r58715 | georg.brandl | 2007-10-30 10:51:18 -0700 (Tue, 30 Oct 2007) | 2 lines Use correct markup. ........ r58716 | georg.brandl | 2007-10-30 10:57:12 -0700 (Tue, 30 Oct 2007) | 2 lines Make example about hiding None return values at the prompt clearer. ........ r58728 | neal.norwitz | 2007-10-30 23:33:20 -0700 (Tue, 30 Oct 2007) | 1 line Fix some compiler warnings for signed comparisons on Unix and Windows. ........ r58731 | martin.v.loewis | 2007-10-31 10:19:33 -0700 (Wed, 31 Oct 2007) | 2 lines Adding Christian Heimes. ........ r58737 | raymond.hettinger | 2007-10-31 14:57:58 -0700 (Wed, 31 Oct 2007) | 1 line Clarify the reasons why pickle is almost always better than marshal ........ r58739 | raymond.hettinger | 2007-10-31 15:15:49 -0700 (Wed, 31 Oct 2007) | 1 line Sets are marshalable. ........
683 lines
26 KiB
ReStructuredText
683 lines
26 KiB
ReStructuredText
|
|
:mod:`sqlite3` --- DB-API 2.0 interface for SQLite databases
|
|
============================================================
|
|
|
|
.. module:: sqlite3
|
|
:synopsis: A DB-API 2.0 implementation using SQLite 3.x.
|
|
.. sectionauthor:: Gerhard Häring <gh@ghaering.de>
|
|
|
|
|
|
SQLite is a C library that provides a lightweight disk-based database that
|
|
doesn't require a separate server process and allows accessing the database
|
|
using a nonstandard variant of the SQL query language. Some applications can use
|
|
SQLite for internal data storage. It's also possible to prototype an
|
|
application using SQLite and then port the code to a larger database such as
|
|
PostgreSQL or Oracle.
|
|
|
|
pysqlite was written by Gerhard Häring and provides a SQL interface compliant
|
|
with the DB-API 2.0 specification described by :pep:`249`.
|
|
|
|
To use the module, you must first create a :class:`Connection` object that
|
|
represents the database. Here the data will be stored in the
|
|
:file:`/tmp/example` file::
|
|
|
|
conn = sqlite3.connect('/tmp/example')
|
|
|
|
You can also supply the special name ``:memory:`` to create a database in RAM.
|
|
|
|
Once you have a :class:`Connection`, you can create a :class:`Cursor` object
|
|
and call its :meth:`execute` method to perform SQL commands::
|
|
|
|
c = conn.cursor()
|
|
|
|
# Create table
|
|
c.execute('''create table stocks
|
|
(date text, trans text, symbol text,
|
|
qty real, price real)''')
|
|
|
|
# Insert a row of data
|
|
c.execute("""insert into stocks
|
|
values ('2006-01-05','BUY','RHAT',100,35.14)""")
|
|
|
|
# Save (commit) the changes
|
|
conn.commit()
|
|
|
|
# We can also close the cursor if we are done with it
|
|
c.close()
|
|
|
|
Usually your SQL operations will need to use values from Python variables. You
|
|
shouldn't assemble your query using Python's string operations because doing so
|
|
is insecure; it makes your program vulnerable to an SQL injection attack.
|
|
|
|
Instead, use the DB-API's parameter substitution. Put ``?`` as a placeholder
|
|
wherever you want to use a value, and then provide a tuple of values as the
|
|
second argument to the cursor's :meth:`execute` method. (Other database modules
|
|
may use a different placeholder, such as ``%s`` or ``:1``.) For example::
|
|
|
|
# Never do this -- insecure!
|
|
symbol = 'IBM'
|
|
c.execute("... where symbol = '%s'" % symbol)
|
|
|
|
# Do this instead
|
|
t = (symbol,)
|
|
c.execute('select * from stocks where symbol=?', t)
|
|
|
|
# Larger example
|
|
for t in (('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
|
|
('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
|
|
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
|
|
):
|
|
c.execute('insert into stocks values (?,?,?,?,?)', t)
|
|
|
|
To retrieve data after executing a SELECT statement, you can either treat the
|
|
cursor as an :term:`iterator`, call the cursor's :meth:`fetchone` method to
|
|
retrieve a single matching row, or call :meth:`fetchall` to get a list of the
|
|
matching rows.
|
|
|
|
This example uses the iterator form::
|
|
|
|
>>> c = conn.cursor()
|
|
>>> c.execute('select * from stocks order by price')
|
|
>>> for row in c:
|
|
... print(row)
|
|
...
|
|
(u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001)
|
|
(u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)
|
|
(u'2006-04-06', u'SELL', u'IBM', 500, 53.0)
|
|
(u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0)
|
|
>>>
|
|
|
|
|
|
.. seealso::
|
|
|
|
http://www.pysqlite.org
|
|
The pysqlite web page.
|
|
|
|
http://www.sqlite.org
|
|
The SQLite web page; the documentation describes the syntax and the available
|
|
data types for the supported SQL dialect.
|
|
|
|
:pep:`249` - Database API Specification 2.0
|
|
PEP written by Marc-André Lemburg.
|
|
|
|
|
|
.. _sqlite3-module-contents:
|
|
|
|
Module functions and constants
|
|
------------------------------
|
|
|
|
|
|
.. data:: PARSE_DECLTYPES
|
|
|
|
This constant is meant to be used with the *detect_types* parameter of the
|
|
:func:`connect` function.
|
|
|
|
Setting it makes the :mod:`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 the converters dictionary and use the converter function
|
|
registered for that type there. Converter names are case-sensitive!
|
|
|
|
|
|
.. data:: PARSE_COLNAMES
|
|
|
|
This constant is meant to be used with the *detect_types* parameter of the
|
|
:func:`connect` function.
|
|
|
|
Setting this makes the SQLite interface 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 :attr:`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 we will parse out everything until the
|
|
first blank for the column name: the column name would simply be "x".
|
|
|
|
|
|
.. function:: connect(database[, timeout, isolation_level, detect_types, factory])
|
|
|
|
Opens a connection to the SQLite database file *database*. You can use
|
|
``":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 *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 *isolation_level* parameter, please see the
|
|
:attr:`Connection.isolation_level` property of :class:`Connection` objects.
|
|
|
|
SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
|
|
you want to use other types you must add support for them yourself. The
|
|
*detect_types* parameter and the using custom **converters** registered with the
|
|
module-level :func:`register_converter` function allow you to easily do that.
|
|
|
|
*detect_types* defaults to 0 (i. e. off, no type detection), you can set it to
|
|
any combination of :const:`PARSE_DECLTYPES` and :const:`PARSE_COLNAMES` to turn
|
|
type detection on.
|
|
|
|
By default, the :mod:`sqlite3` module uses its :class:`Connection` class for the
|
|
connect call. You can, however, subclass the :class:`Connection` class and make
|
|
:func:`connect` use your class instead by providing your class for the *factory*
|
|
parameter.
|
|
|
|
Consult the section :ref:`sqlite3-types` of this manual for details.
|
|
|
|
The :mod:`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 *cached_statements* parameter. The currently
|
|
implemented default is to cache 100 statements.
|
|
|
|
|
|
.. function:: 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 *typename*. Confer the parameter *detect_types* of the :func:`connect`
|
|
function for how the type detection works. Note that the case of *typename* and
|
|
the name of the type in your query must match!
|
|
|
|
|
|
.. function:: register_adapter(type, callable)
|
|
|
|
Registers a callable to convert the custom Python type *type* into one of
|
|
SQLite's supported types. The callable *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.
|
|
|
|
|
|
.. function:: complete_statement(sql)
|
|
|
|
Returns :const:`True` if the string *sql* contains one or more complete SQL
|
|
statements terminated by semicolons. It does not verify that the SQL is
|
|
syntactically correct, only that there are no unclosed string literals and the
|
|
statement is terminated by a semicolon.
|
|
|
|
This can be used to build a shell for SQLite, as in the following example:
|
|
|
|
|
|
.. literalinclude:: ../includes/sqlite3/complete_statement.py
|
|
|
|
|
|
.. function:: enable_callback_tracebacks(flag)
|
|
|
|
By default you will not get any tracebacks in user-defined functions,
|
|
aggregates, converters, authorizer callbacks etc. If you want to debug them, you
|
|
can call this function with *flag* as True. Afterwards, you will get tracebacks
|
|
from callbacks on ``sys.stderr``. Use :const:`False` to disable the feature
|
|
again.
|
|
|
|
|
|
.. _sqlite3-connection-objects:
|
|
|
|
Connection Objects
|
|
------------------
|
|
|
|
A :class:`Connection` instance has the following attributes and methods:
|
|
|
|
.. attribute:: Connection.isolation_level
|
|
|
|
Get or set the current isolation level. None for autocommit mode or one of
|
|
"DEFERRED", "IMMEDIATE" or "EXLUSIVE". See section
|
|
:ref:`sqlite3-controlling-transactions` for a more detailed explanation.
|
|
|
|
|
|
.. method:: Connection.cursor([cursorClass])
|
|
|
|
The cursor method accepts a single optional parameter *cursorClass*. If
|
|
supplied, this must be a custom cursor class that extends
|
|
:class:`sqlite3.Cursor`.
|
|
|
|
|
|
.. method:: Connection.execute(sql, [parameters])
|
|
|
|
This is a nonstandard shortcut that creates an intermediate cursor object by
|
|
calling the cursor method, then calls the cursor's :meth:`execute` method with
|
|
the parameters given.
|
|
|
|
|
|
.. method:: Connection.executemany(sql, [parameters])
|
|
|
|
This is a nonstandard shortcut that creates an intermediate cursor object by
|
|
calling the cursor method, then calls the cursor's :meth:`executemany` method
|
|
with the parameters given.
|
|
|
|
|
|
.. method:: Connection.executescript(sql_script)
|
|
|
|
This is a nonstandard shortcut that creates an intermediate cursor object by
|
|
calling the cursor method, then calls the cursor's :meth:`executescript` method
|
|
with the parameters given.
|
|
|
|
|
|
.. method:: Connection.create_function(name, num_params, func)
|
|
|
|
Creates a user-defined function that you can later use from within SQL
|
|
statements under the function name *name*. *num_params* is the number of
|
|
parameters the function accepts, and *func* is a Python callable that is called
|
|
as the SQL function.
|
|
|
|
The function can return any of the types supported by SQLite: unicode, str, int,
|
|
long, float, buffer and None.
|
|
|
|
Example:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/md5func.py
|
|
|
|
|
|
.. method:: Connection.create_aggregate(name, num_params, aggregate_class)
|
|
|
|
Creates a user-defined aggregate function.
|
|
|
|
The aggregate class must implement a ``step`` method, which accepts the number
|
|
of parameters *num_params*, and a ``finalize`` method which will return the
|
|
final result of the aggregate.
|
|
|
|
The ``finalize`` method can return any of the types supported by SQLite:
|
|
unicode, str, int, long, float, buffer and None.
|
|
|
|
Example:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/mysumaggr.py
|
|
|
|
|
|
.. method:: Connection.create_collation(name, callable)
|
|
|
|
Creates a collation with the specified *name* and *callable*. The callable will
|
|
be passed two string arguments. It should return -1 if the first is ordered
|
|
lower than the second, 0 if they are ordered equal and 1 if the first is ordered
|
|
higher than the second. Note that this controls sorting (ORDER BY in SQL) so
|
|
your comparisons don't affect other SQL operations.
|
|
|
|
Note that the callable will get its parameters as Python bytestrings, which will
|
|
normally be encoded in UTF-8.
|
|
|
|
The following example shows a custom collation that sorts "the wrong way":
|
|
|
|
.. literalinclude:: ../includes/sqlite3/collation_reverse.py
|
|
|
|
To remove a collation, call ``create_collation`` with None as callable::
|
|
|
|
con.create_collation("reverse", None)
|
|
|
|
|
|
.. method:: Connection.interrupt()
|
|
|
|
You can call this method from a different thread to abort any queries that might
|
|
be executing on the connection. The query will then abort and the caller will
|
|
get an exception.
|
|
|
|
|
|
.. method:: Connection.set_authorizer(authorizer_callback)
|
|
|
|
This routine registers a callback. The callback is invoked for each attempt to
|
|
access a column of a table in the database. The callback should return
|
|
:const:`SQLITE_OK` if access is allowed, :const:`SQLITE_DENY` if the entire SQL
|
|
statement should be aborted with an error and :const:`SQLITE_IGNORE` if the
|
|
column should be treated as a NULL value. These constants are available in the
|
|
:mod:`sqlite3` module.
|
|
|
|
The first argument to the callback signifies what kind of operation is to be
|
|
authorized. The second and third argument will be arguments or :const:`None`
|
|
depending on the first argument. The 4th argument is the name of the database
|
|
("main", "temp", etc.) if applicable. The 5th argument is the name of the
|
|
inner-most trigger or view that is responsible for the access attempt or
|
|
:const:`None` if this access attempt is directly from input SQL code.
|
|
|
|
Please consult the SQLite documentation about the possible values for the first
|
|
argument and the meaning of the second and third argument depending on the first
|
|
one. All necessary constants are available in the :mod:`sqlite3` module.
|
|
|
|
|
|
.. attribute:: Connection.row_factory
|
|
|
|
You can change this attribute to a callable that accepts the cursor and the
|
|
original row as a tuple and will return the real result row. This way, you can
|
|
implement more advanced ways of returning results, such as returning an object
|
|
that can also access columns by name.
|
|
|
|
Example:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/row_factory.py
|
|
|
|
If returning a tuple doesn't suffice and you want name-based access to
|
|
columns, you should consider setting :attr:`row_factory` to the
|
|
highly-optimized :class:`sqlite3.Row` type. :class:`Row` provides both
|
|
index-based and case-insensitive name-based access to columns with almost no
|
|
memory overhead. It will probably be better than your own custom
|
|
dictionary-based approach or even a db_row based solution.
|
|
|
|
.. % XXX what's a db_row-based solution?
|
|
|
|
|
|
.. attribute:: Connection.text_factory
|
|
|
|
Using this attribute you can control what objects are returned for the TEXT data
|
|
type. By default, this attribute is set to :class:`unicode` and the
|
|
:mod:`sqlite3` module will return Unicode objects for TEXT. If you want to
|
|
return bytestrings instead, you can set it to :class:`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
|
|
:const:`sqlite3.OptimizedUnicode`.
|
|
|
|
You can also set it to any other callable that accepts a single bytestring
|
|
parameter and returns the resulting object.
|
|
|
|
See the following example code for illustration:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/text_factory.py
|
|
|
|
|
|
.. attribute:: Connection.total_changes
|
|
|
|
Returns the total number of database rows that have been modified, inserted, or
|
|
deleted since the database connection was opened.
|
|
|
|
|
|
.. _sqlite3-cursor-objects:
|
|
|
|
Cursor Objects
|
|
--------------
|
|
|
|
A :class:`Cursor` instance has the following attributes and methods:
|
|
|
|
|
|
.. method:: Cursor.execute(sql, [parameters])
|
|
|
|
Executes a SQL statement. The SQL statement may be parametrized (i. e.
|
|
placeholders instead of SQL literals). The :mod:`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:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/execute_1.py
|
|
|
|
This example shows how to use the named style:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/execute_2.py
|
|
|
|
:meth:`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
|
|
:meth:`executescript` if you want to execute multiple SQL statements with one
|
|
call.
|
|
|
|
|
|
.. method:: Cursor.executemany(sql, seq_of_parameters)
|
|
|
|
Executes a SQL command against all parameter sequences or mappings found in
|
|
the sequence *sql*. The :mod:`sqlite3` module also allows using an
|
|
:term:`iterator` yielding parameters instead of a sequence.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/executemany_1.py
|
|
|
|
Here's a shorter example using a :term:`generator`:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/executemany_2.py
|
|
|
|
|
|
.. method:: Cursor.executescript(sql_script)
|
|
|
|
This is a nonstandard convenience method for executing multiple SQL statements
|
|
at once. It issues a COMMIT statement first, then executes the SQL script it
|
|
gets as a parameter.
|
|
|
|
*sql_script* can be a bytestring or a Unicode string.
|
|
|
|
Example:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/executescript.py
|
|
|
|
|
|
.. attribute:: Cursor.rowcount
|
|
|
|
Although the :class:`Cursor` class of the :mod:`sqlite3` module implements this
|
|
attribute, the database engine's own support for the determination of "rows
|
|
affected"/"rows selected" is quirky.
|
|
|
|
For ``DELETE`` statements, SQLite reports :attr:`rowcount` as 0 if you make a
|
|
``DELETE FROM table`` without any condition.
|
|
|
|
For :meth:`executemany` statements, the number of modifications are summed up
|
|
into :attr:`rowcount`.
|
|
|
|
As required by the Python DB API Spec, the :attr:`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".
|
|
|
|
This includes ``SELECT`` statements because we cannot determine the number of
|
|
rows a query produced until all rows were fetched.
|
|
|
|
|
|
.. _sqlite3-types:
|
|
|
|
SQLite and Python types
|
|
-----------------------
|
|
|
|
|
|
Introduction
|
|
^^^^^^^^^^^^
|
|
|
|
SQLite natively supports the following types: NULL, INTEGER, REAL, TEXT, BLOB.
|
|
|
|
The following Python types can thus be sent to SQLite without any problem:
|
|
|
|
+------------------------+-------------+
|
|
| Python type | SQLite type |
|
|
+========================+=============+
|
|
| ``None`` | NULL |
|
|
+------------------------+-------------+
|
|
| ``int`` | INTEGER |
|
|
+------------------------+-------------+
|
|
| ``long`` | INTEGER |
|
|
+------------------------+-------------+
|
|
| ``float`` | REAL |
|
|
+------------------------+-------------+
|
|
| ``str (UTF8-encoded)`` | TEXT |
|
|
+------------------------+-------------+
|
|
| ``unicode`` | TEXT |
|
|
+------------------------+-------------+
|
|
| ``buffer`` | BLOB |
|
|
+------------------------+-------------+
|
|
|
|
This is how SQLite types are converted to Python types by default:
|
|
|
|
+-------------+---------------------------------------------+
|
|
| SQLite type | Python type |
|
|
+=============+=============================================+
|
|
| ``NULL`` | None |
|
|
+-------------+---------------------------------------------+
|
|
| ``INTEGER`` | int or long, depending on size |
|
|
+-------------+---------------------------------------------+
|
|
| ``REAL`` | float |
|
|
+-------------+---------------------------------------------+
|
|
| ``TEXT`` | depends on text_factory, unicode by default |
|
|
+-------------+---------------------------------------------+
|
|
| ``BLOB`` | buffer |
|
|
+-------------+---------------------------------------------+
|
|
|
|
The type system of the :mod:`sqlite3` module is extensible in two ways: you can
|
|
store additional Python types in a SQLite database via object adaptation, and
|
|
you can let the :mod:`sqlite3` module convert SQLite types to different Python
|
|
types via converters.
|
|
|
|
|
|
Using adapters to store additional Python types in SQLite databases
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
As described before, SQLite supports only a limited set of types natively. To
|
|
use other Python types with SQLite, you must **adapt** them to one of the
|
|
sqlite3 module's supported types for SQLite: one of NoneType, int, long, float,
|
|
str, unicode, buffer.
|
|
|
|
The :mod:`sqlite3` module uses Python object adaptation, as described in
|
|
:pep:`246` for this. The protocol to use is :class:`PrepareProtocol`.
|
|
|
|
There are two ways to enable the :mod:`sqlite3` module to adapt a custom Python
|
|
type to one of the supported ones.
|
|
|
|
|
|
Letting your object adapt itself
|
|
""""""""""""""""""""""""""""""""
|
|
|
|
This is a good approach if you write the class yourself. Let's suppose you have
|
|
a class like this::
|
|
|
|
class Point(object):
|
|
def __init__(self, x, y):
|
|
self.x, self.y = x, y
|
|
|
|
Now you want to store the point in a single SQLite column. First you'll have to
|
|
choose one of the supported types first to be used for representing the point.
|
|
Let's just use str and separate the coordinates using a semicolon. Then you need
|
|
to give your class a method ``__conform__(self, protocol)`` which must return
|
|
the converted value. The parameter *protocol* will be :class:`PrepareProtocol`.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/adapter_point_1.py
|
|
|
|
|
|
Registering an adapter callable
|
|
"""""""""""""""""""""""""""""""
|
|
|
|
The other possibility is to create a function that converts the type to the
|
|
string representation and register the function with :meth:`register_adapter`.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/adapter_point_2.py
|
|
|
|
The :mod:`sqlite3` module has two default adapters for Python's built-in
|
|
:class:`datetime.date` and :class:`datetime.datetime` types. Now let's suppose
|
|
we want to store :class:`datetime.datetime` objects not in ISO representation,
|
|
but as a Unix timestamp.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/adapter_datetime.py
|
|
|
|
|
|
Converting SQLite values to custom Python types
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Writing an adapter lets you send custom Python types to SQLite. But to make it
|
|
really useful we need to make the Python to SQLite to Python roundtrip work.
|
|
|
|
Enter converters.
|
|
|
|
Let's go back to the :class:`Point` class. We stored the x and y coordinates
|
|
separated via semicolons as strings in SQLite.
|
|
|
|
First, we'll define a converter function that accepts the string as a parameter
|
|
and constructs a :class:`Point` object from it.
|
|
|
|
.. note::
|
|
|
|
Converter functions **always** get called with a string, no matter under which
|
|
data type you sent the value to SQLite.
|
|
|
|
.. note::
|
|
|
|
Converter names are looked up in a case-sensitive manner.
|
|
|
|
::
|
|
|
|
def convert_point(s):
|
|
x, y = map(float, s.split(";"))
|
|
return Point(x, y)
|
|
|
|
Now you need to make the :mod:`sqlite3` module know that what you select from
|
|
the database is actually a point. There are two ways of doing this:
|
|
|
|
* Implicitly via the declared type
|
|
|
|
* Explicitly via the column name
|
|
|
|
Both ways are described in section :ref:`sqlite3-module-contents`, in the entries
|
|
for the constants :const:`PARSE_DECLTYPES` and :const:`PARSE_COLNAMES`.
|
|
|
|
The following example illustrates both approaches.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/converter_point.py
|
|
|
|
|
|
Default adapters and converters
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
There are default adapters for the date and datetime types in the datetime
|
|
module. They will be sent as ISO dates/ISO timestamps to SQLite.
|
|
|
|
The default converters are registered under the name "date" for
|
|
:class:`datetime.date` and under the name "timestamp" for
|
|
:class:`datetime.datetime`.
|
|
|
|
This way, you can use date/timestamps from Python without any additional
|
|
fiddling in most cases. The format of the adapters is also compatible with the
|
|
experimental SQLite date/time functions.
|
|
|
|
The following example demonstrates this.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/pysqlite_datetime.py
|
|
|
|
|
|
.. _sqlite3-controlling-transactions:
|
|
|
|
Controlling Transactions
|
|
------------------------
|
|
|
|
By default, the :mod:`sqlite3` module opens transactions implicitly before a
|
|
Data Modification Language (DML) statement (i.e. INSERT/UPDATE/DELETE/REPLACE),
|
|
and commits transactions implicitly before a non-DML, non-query statement (i. e.
|
|
anything other than SELECT/INSERT/UPDATE/DELETE/REPLACE).
|
|
|
|
So if you are within a transaction and issue a command like ``CREATE TABLE
|
|
...``, ``VACUUM``, ``PRAGMA``, the :mod:`sqlite3` module will commit implicitly
|
|
before executing that command. There are two reasons for doing that. The first
|
|
is that some of these commands don't work within transactions. The other reason
|
|
is that pysqlite needs to keep track of the transaction state (if a transaction
|
|
is active or not).
|
|
|
|
You can control which kind of "BEGIN" statements pysqlite implicitly executes
|
|
(or none at all) via the *isolation_level* parameter to the :func:`connect`
|
|
call, or via the :attr:`isolation_level` property of connections.
|
|
|
|
If you want **autocommit mode**, then set :attr:`isolation_level` to None.
|
|
|
|
Otherwise leave it at its default, which will result in a plain "BEGIN"
|
|
statement, or set it to one of SQLite's supported isolation levels: DEFERRED,
|
|
IMMEDIATE or EXCLUSIVE.
|
|
|
|
As the :mod:`sqlite3` module needs to keep track of the transaction state, you
|
|
should not use ``OR ROLLBACK`` or ``ON CONFLICT ROLLBACK`` in your SQL. Instead,
|
|
catch the :exc:`IntegrityError` and call the :meth:`rollback` method of the
|
|
connection yourself.
|
|
|
|
|
|
Using pysqlite efficiently
|
|
--------------------------
|
|
|
|
|
|
Using shortcut methods
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Using the nonstandard :meth:`execute`, :meth:`executemany` and
|
|
:meth:`executescript` methods of the :class:`Connection` object, your code can
|
|
be written more concisely because you don't have to create the (often
|
|
superfluous) :class:`Cursor` objects explicitly. Instead, the :class:`Cursor`
|
|
objects are created implicitly and these shortcut methods return the cursor
|
|
objects. This way, you can execute a SELECT statement and iterate over it
|
|
directly using only a single call on the :class:`Connection` object.
|
|
|
|
.. literalinclude:: ../includes/sqlite3/shortcut_methods.py
|
|
|
|
|
|
Accessing columns by name instead of by index
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
One useful feature of the :mod:`sqlite3` module is the builtin
|
|
:class:`sqlite3.Row` class designed to be used as a row factory.
|
|
|
|
Rows wrapped with this class can be accessed both by index (like tuples) and
|
|
case-insensitively by name:
|
|
|
|
.. literalinclude:: ../includes/sqlite3/rowclass.py
|
|
|