Differences between revisions 8 and 10 (spanning 2 versions)
Revision 8 as of 2007-06-16 00:52:29
Size: 2251
Comment:
Revision 10 as of 2008-02-01 18:41:34
Size: 3349
Editor: PaulBoddie
Comment: Rearranged similar to the PostgreSQL page.
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
[[TableOfContents]]
Line 4: Line 3:
== Masthead == = SQLite =
Line 6: Line 5:
  URL:: http://sqlite.org/
  licence:: Sources are uncopyrighted. Use for any purpose.
  platforms:: Built and tested under Linux and Win2K.
 URL:: http://sqlite.org/
 licence:: Sources are uncopyrighted. Use for any purpose.
 platforms:: Built and tested under Linux and Win2K.

== Pros ==

I think SQLite may be a good replacement for gadfly, because:

 * The main engine is written in C, so it should be faster than the gadfly implementation in Python
 * It's extensible in a very easy way via Python
 * It doesn't put all data in memory like gadfly does (yet you can do that if you want, just use ':memory:' as filename
 * It's very cool for small databased application, because you do not have to start an external DBMS
 * Implements almost all of SQL92

== Cons ==

 * SQLite only supports the basic types NULL, INTEGER, FLOAT, TEXT and BLOB
 * If you want to use other types like DATE and TIME in pysqlite, you need to use its "pysqlite types mode", where things can get a little nastier.

----
Line 14: Line 30:
  URL:: http://pysqlite.org/
  SourceForge:: http://sourceforge.net/projects/pysqlite
  licence:: zlib/libpng License
  platforms:: Windows 95/98/2000/XP, POSIX, MacOS X
  Python versions:: 2.1 or later (1.x branch)/2.3 or later (2.0 branch).  Included in Python 2.5.
 URL:: http://pysqlite.org/
 SourceForge:: http://sourceforge.net/projects/pysqlite
 licence:: zlib/libpng License
 platforms:: Windows 95/98/2000/XP, POSIX, MacOS X
 Python versions:: 2.1 or later (1.x branch)/2.3 or later (2.0 branch). Included in Python 2.5.
Line 22: Line 38:
  * Extensible type conversion
  * Factories for connection and cursor objects
  * row converter factory to easily and efficiently switch to a nonstandard type for rows (e. g. dicts)
  * User-defined functions and aggregates

==== Comments ====
 * Extensible type conversion
 * Factories for connection and cursor objects
 * row converter factory to easily and efficiently switch to a nonstandard type for rows (e. g. dicts)
 * User-defined functions and aggregates
Line 33: Line 47:
  URL:: http://www.rogerbinns.com/apsw.html
  licence:: zlib/libpng license
  platforms:: Windows, POSIX
  Python versions:: ?
 URL:: http://www.rogerbinns.com/apsw.html
 licence:: zlib/libpng license
 platforms:: Windows, POSIX
 Python versions:: ?
Line 42: Line 56:
==== Comments ==== ----
Line 54: Line 68:
== Pros == == Usage Notes ==
The following solution was difficult to discover with the available documentation (http://pysqlite.org/ was unavailable). If this page can be found by others searching for answers, it may save many hours of frustration.
Line 56: Line 71:
I think SQLite may be a good replacement for gadfly, because: === Id of Most Recent Row ===
After creating a new row in a table that uses AUTOINCREMENT to create the PRIMARY KEY, one may wish to determine the value of the new row-id, for example if the value is need for a new row in a related table that will be inserted next. The answer is to use the ''lastrowid'' property of the ''cursor'' class as in {{{newId=c.lastrowid }}} shown below in a demo context. Tested in Python2.5.1 with the sqlite3 module:
Line 58: Line 74:
 * the main engine is written in C, so it should be faster than the gadfly implementation in Python
 * it's extensible in a very easy way via Python
 * it doesn't put all data in memory like gadfly does (yet you can do that if you want, just use ':memory:' as filename
 * It's very cool for small databased application, because you do not have to start an external DBMS
 * Implements almost all of SQL92
{{{
           import sqlite3
           con = sqlite3.connect('demo.db')
           con.execute("""CREATE TABLE tbl (
               id INTEGER PRIMARY KEY AUTOINCREMENT,
               grp INTEGER)""")
           c = con.cursor()
           c.execute("""INSERT INTO tbl (grp) VALUES (0);""")
Line 64: Line 83:
== Cons ==            newId = c.lastrowid
Line 66: Line 85:
 * SQLite only supports the basic types NULL, INTEGER, FLOAT, TEXT and BLOB
 * If you want to use other types like DATE and TIME in pysqlite, you need to use its "pysqlite types mode", where things can get a little nastier.
           print "New rowid =", newId
           c.close()
           con.close()
}}}
The result is printed:{{{ New rowid = 1}}}

SQLite

URL

http://sqlite.org/

licence
Sources are uncopyrighted. Use for any purpose.
platforms
Built and tested under Linux and Win2K.

Pros

I think SQLite may be a good replacement for gadfly, because:

  • The main engine is written in C, so it should be faster than the gadfly implementation in Python
  • It's extensible in a very easy way via Python
  • It doesn't put all data in memory like gadfly does (yet you can do that if you want, just use ':memory:' as filename
  • It's very cool for small databased application, because you do not have to start an external DBMS
  • Implements almost all of SQL92

Cons

  • SQLite only supports the basic types NULL, INTEGER, FLOAT, TEXT and BLOB
  • If you want to use other types like DATE and TIME in pysqlite, you need to use its "pysqlite types mode", where things can get a little nastier.


DB API 2.0 Drivers

pysqlite

URL

http://pysqlite.org/

SourceForge

http://sourceforge.net/projects/pysqlite

licence
zlib/libpng License
platforms
Windows 95/98/2000/XP, POSIX, MacOS X
Python versions
2.1 or later (1.x branch)/2.3 or later (2.0 branch). Included in Python 2.5.

Extensions to DB API

  • Extensible type conversion
  • Factories for connection and cursor objects
  • row converter factory to easily and efficiently switch to a nonstandard type for rows (e. g. dicts)
  • User-defined functions and aggregates

Other Drivers

APSW

URL

http://www.rogerbinns.com/apsw.html

licence
zlib/libpng license
platforms
Windows, POSIX
Python versions
?

Programming Model

APSW is a SQLite 3 wrapper that provides a thin layer over SQLite 3. Although APSW looks vaguely similar to the DBAPI, it is not compliant with that API and instead mirrors the way SQLite 3 works.


Supported Python Applications

  • Thuban (GIS application)
  • Roundup (issue tracker)
  • PyPI (Python Package Index)
  • Trac (issue tracker, wiki, Subversion web frontend)
  • Cloud Wiki (wiki)
  • Supybot (IRC bot framework)
  • PyAddbook (Address Book)

Usage Notes

The following solution was difficult to discover with the available documentation (http://pysqlite.org/ was unavailable). If this page can be found by others searching for answers, it may save many hours of frustration.

Id of Most Recent Row

After creating a new row in a table that uses AUTOINCREMENT to create the PRIMARY KEY, one may wish to determine the value of the new row-id, for example if the value is need for a new row in a related table that will be inserted next. The answer is to use the lastrowid property of the cursor class as in newId=c.lastrowid  shown below in a demo context. Tested in Python2.5.1 with the sqlite3 module:

           import sqlite3
           con = sqlite3.connect('demo.db')
           con.execute("""CREATE TABLE tbl (
               id INTEGER PRIMARY KEY AUTOINCREMENT,
               grp INTEGER)""")
           c = con.cursor()
           c.execute("""INSERT INTO tbl (grp) VALUES (0);""")

           newId = c.lastrowid

           print "New rowid =", newId
           c.close()
           con.close()

The result is printed: New rowid = 1

SQLite (last edited 2012-01-30 07:26:58 by 50-0-67-239)

Unable to edit the page? See the FrontPage for instructions.