The Model - View - Controller approach to application design keeps the Graphic User Interface (the view) separate from the database (the model), with the controller in between the two, describing how the data is displayed, and how changes to the data are saved away in the database. By separating the elements in this way, extra displays can be added and removed, and the look and feel can be changed, without effecting the underlying data structure. And algorithms that deal with the data can be amended (and re-used away from the GUI) without effecting the GUIs.
It's a grand theory ... but do I have a small, practical first example in [LANGUAGE] using the [GUINAME] GUI and the [DATABASE] database? That's a question I'm often asked ... and today I put together such an example where the answers were:
• Python 3 for the language
• Qt4 (via PyQt) for the GUI
• SQlite for the database.
This is what the application looks like when it's run - the view. It's displaying the list of hotel names from the database - the model - through a piece of logic which extracts each hotel via a hotel object and converts it into the string to be displayed - the controller.
There are four files in the main application - there's
[model.py] which fetches all the hotel objects from the SQlite database. There's
[tourist.py] which defines the hotel objects in the model. There's the controller which generates the list for display at
[accomlist.py], and there's the view which is at
[ticfull.py].
You'll find two more files associated with this demonstration - there's a second (simpler) view to illustrate how it broadens out to show the model in different ways - that's at
[tic_view.py] and there's
[sqlite.py] which is a separate program to populate the database.
(written 2010-04-29)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y206 - Python and the Qt GUI [1036] Python Qt, wX, TkInter, and Jython - training?? - (2007-01-16)
[2744] PyQt (Python and Qt) and wxPython - GUI comparison - (2010-04-28)
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)
[2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
[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)
[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)
Q910 - Object Orientation and General technical topics - GUI principles [3081] wxPython - simple example to add GUI to a server log file analysis - (2010-12-08)
[4258] Keeping you Tkinter display up to date while monitoring - (2014-04-06)
[4589] Principles or a GUI and their practical application using wxPthon - (2015-11-30)
Some other Articles
Views of WessexDelegate Question - defining MySQL table relationships as you create the tablesMonitoring the success and traffic of your web siteContainment, Associative Objects, Inheritance, packages and modulesModel - View - Controller demo, Sqlite - Python 3 - Qt4Public Open Source Training Courses running this summer and autumn in MelkshamA simple server benchmark scriptWhat is a factory?