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 as below, or enter http://melksh.am/nnnn for individual articles
Y115 - Additional Python Facilities [183] The elegance of Python - (2005-01-19)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[239] What and why for the epoch - (2005-03-08)
[463] Splitting the difference - (2005-10-13)
[663] Python to MySQL - (2006-03-31)
[672] Keeping your regular expressions simple - (2006-04-05)
[753] Python 3000 - the next generation - (2006-06-09)
[901] Python - listing out the contents of all variables - (2006-10-21)
[1043] Sending an email from Python - (2007-01-18)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1149] Turning objects into something you can store - Pickling (Python) - (2007-04-15)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1337] A series of tyre damages - (2007-09-08)
[1876] Python Regular Expressions - (2008-11-08)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2462] Python - how it saves on compile time - (2009-10-20)
[2655] Python - what is going on around me? - (2010-02-28)
[2721] Regular Expressions in Python - (2010-04-14)
[2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[4085] JSON from Python - first principles, easy example - (2013-05-13)
[4211] Handling JSON in Python (and a csv, marshall and pickle comparison) - (2013-11-16)
[4298] Python - an interesting application - (2014-09-18)
[4439] Json is the new marshall, pickle and cPickle / Python - (2015-02-22)
[4451] Running an operating system command from your Python program - the new way with the subprocess module - (2015-03-06)
[4536] Json load from URL, recursive display, Python 3.4 - (2015-10-14)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4709] Some gems from Intermediate Python - (2016-10-30)
Y113 - Python and SQL databases [3136] A framework with python - Django - first steps - (2011-01-17)
[3139] Steering our Python courses towards wxPython, SQLite and Django - (2011-01-19)
[4024] SQL databases from Python - an SQLite example - (2013-03-02)
[4086] Cacheing class for Python - using a local SQLite database as a key/value store - (2013-05-14)
[4436] Accessing a MySQL database from Python with mysql.connector - (2015-02-21)
[4445] Graphing presentations in Python - huge data, numpy and matplotlib - (2015-02-28)
[4535] SQLAlchemy - first examples with a Python Object Relationship Mapping system - (2015-10-14)
[4537] example of SQLite using a local database file through SQLalchemy - (2015-10-14)
S200 - MySQL - SQLite [2561] The future of MySQL - (2010-01-03)
[2744] PyQt (Python and Qt) and wxPython - GUI comparison - (2010-04-28)
[3099] Perl - database access - DBD, DBI and DBIx modules - (2010-12-22)
[3269] Files or Databases? MySQL, SQLite, or Oracle? - (2011-04-28)
[4006] Ruby / SQLite3 example program, showing JOIN v LEFT JOIN - (2013-02-16)
[4007] Which database should I use? MySQL v SQLite - (2013-02-16)
S156 - Interfacing Applications to MySQL Databases [104] mysql_connect or mysql_pconnect in PHP? - (2004-10-30)
[644] Using a MySQL database from Perl - (2006-03-13)
[723] Viewing images held in a MySQL database via PHP - (2006-05-17)
[1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
[1450] Easy selection of multiple SQL conditions from PHP - (2007-11-30)
[1518] Downloading data for use in Excel (from PHP / MySQL) - (2008-01-25)
[1561] Uploading to a MySQL database through PHP - examples and common questions - (2008-03-02)
[1885] Hiding a MySQL database behind a web page - (2008-11-15)
[2263] Mysqldump fails as a cron job - a work around - (2009-06-30)
[2381] Checking the database connection manually - (2009-08-28)
[3035] How to display information from a database within a web page - (2010-11-07)
[3447] Needle in a haystack - finding the web server overload - (2011-09-18)
[3455] MySQL, MySQLi, PDO or something else - how best to talk to databases from PHP - (2011-09-24)
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