For developing a Python application, and for light use, the SQLite database may be a good choice ... but then you may want to be able to expand the system to use a central database with a more classic server such as MySQL at a later date.
Using Polymorphism in Python, and with a careful choice of which database connector you use, you should be able to write code that is easily ported.
I have written a simple demonstration that connects to a database (whether it's a local file via SQlite or a server via MySQL), creates two new tables, populates the tables with data, then does a left join.
The connection to the databases differs. Here it is for SQlite:
import sqlite3
conn = sqlite3.connect('/tmp/example')
and here it is for MySQL:
import mysql.connector
conn = mysql.connector.Connect(host='192.168.200.115',\
 ' user='demo',password='abc123',database='test')
But thereafter, the code is the same - so it will work equally on a local SQLite database, and on a database on my server at 192.168.200.115. Source code for the sqlite example -
[here] and for the MySQL example
[here].
The sqlite drivers are now INCLUDED with Python Distributions. MySQL connector/Python is available at places including
[here] at Launchpad. Stated o be in early condition, but some people swear by it already!
(written 2010-04-28)
Associated topics are indexed under
Y115 - Additional Python Facilities [4085] JSON from Python - first principles, easy example - (2013-05-13)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
[2721] Regular Expressions in Python - (2010-04-14)
[2655] Python - what is going on around me? - (2010-02-28)
[2462] Python - how it saves on compile time - (2009-10-20)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[1876] Python Regular Expressions - (2008-11-08)
[1337] A series of tyre damages - (2007-09-08)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1149] Turning objects into something you can store - Pickling (Python) - (2007-04-15)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1043] Sending an email from Python - (2007-01-18)
[901] Python - listing out the contents of all variables - (2006-10-21)
[753] Python 3000 - the next generation - (2006-06-09)
[672] Keeping your regular expressions simple - (2006-04-05)
[663] Python to MySQL - (2006-03-31)
[463] Splitting the difference - (2005-10-13)
[239] What and why for the epoch - (2005-03-08)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[183] The elegance of Python - (2005-01-19)
S200 - MySQL - SQLite [4024] SQL databases from Python - an SQLite example - (2013-03-02)
[4007] Which database should I use? MySQL v SQLite - (2013-02-16)
[4006] Ruby / SQLite3 example program, showing JOIN v LEFT JOIN - (2013-02-16)
[3269] Files or Databases? MySQL, SQLite, or Oracle? - (2011-04-28)
[3139] Steering our Python courses towards wxPython, SQLite and Django - (2011-01-19)
[3099] Perl - database access - DBD, DBI and DBIx modules - (2010-12-22)
[2744] PyQt (Python and Qt) and wxPython - GUI comparison - (2010-04-28)
[2561] The future of MySQL - (2010-01-03)
S156 - Interfacing Applications to MySQL Databases [3455] MySQL, MySQLi, PDO or something else - how best to talk to databases from PHP - (2011-09-24)
[3447] Needle in a haystack - finding the web server overload - (2011-09-18)
[3035] How to display information from a database within a web page - (2010-11-07)
[2381] Checking the database connection manually - (2009-08-28)
[2263] Mysqldump fails as a cron job - a work around - (2009-06-30)
[1885] Hiding a MySQL database behind a web page - (2008-11-15)
[1561] Uploading to a MySQL database through PHP - examples and common questions - (2008-03-02)
[1518] Downloading data for use in Excel (from PHP / MySQL) - (2008-01-25)
[1450] Easy selection of multiple SQL conditions from PHP - (2007-11-30)
[1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
[723] Viewing images held in a MySQL database via PHP - (2006-05-17)
[644] Using a MySQL database from Perl - (2006-03-13)
[104] mysql_connect or mysql_pconnect in PHP? - (2004-10-30)
Y113 - Python and SQL databases [4086] Cacheing class for Python - using a local SQLite database as a key/value store - (2013-05-14)
[3136] A framework with python - Django - first steps - (2011-01-17)
56c3
Some other Articles
Delegate Question - defining MySQL table relationships as you create the tablesMonitoring the success and traffic of your web siteContainment, Associative Objects, Inheritance, packages and modulesConnecting Python to sqlite and MySQL databasesPublic Open Source Training Courses running this summer and autumn in MelkshamA simple server benchmark scriptWhat is a factory?Melksham Hustings at George Ward School