Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
Accessing a MySQL database from Python with mysql.connector

On our programming courses we often use SQLite as our database - it installs locally, saves us the need for daemons, saves licensing and password issues, and lets us cover the interfacing very quickly and easily. There's a Python example [here].

However, there are some occasions when a customer may specify a particular database they wish to use, or may ask us to talk to a daemon based engine, and for these purposes for Python I've added a MySQL server, and the connector class, on one of my training machines (Kingston) today.

Firstly (and outside this note) install and get MySQL running and set up an appropriate account and password. Check that it works using the local MySQL client - there's a copy of what you should do and see [here].

Then grab the Python connector - current version at https://pypi.python.org/pypi/mysql-connector-python/2.0.3 , but that will vary with release number over time. Install it by running (as root):
  python setup.py install

You can then run test programs - I have three which I've adapted from the open source examples supplies with the drivers - the first one does the basic CRUD stuff - Create, Read, Update, Delete - see [here]. The second uses results within results - see [here], and the third and final example in this series - [here] - uses prepared statements which just need to be filled in within a formatting loop.

A tiny Python program / very simple class can often sit on top of a huge database ... while writing this note, I downloaded a backup of our database which is 3 Gytes of compressed data (we have two huge image libraries with 10,000 images each in there) - yet I can access that data quickly, simply and easily from Python.

Try out what you want with the MySQL client (or a tool) first:

mysql> select id_topic,subject from smf_messages group by id_topic order by id_topic desc limit 20;
+----------+--------------------------------------------------------------------------+
| id_topic | subject                                                                  |
+----------+--------------------------------------------------------------------------+
|    15416 | Suggestion - extra early evening peak train                              |
|    15415 | Re: An extra service to Frome from May 2015.  Potential for another???   |
|    15414 | Rules of the Road                                                        |
|    15413 | Re: Electric spurs?                                                      |
|    15412 | Re: Landslide Exeter St Davids and Tiverton Parkway 20 Feb 2015          |
|    15411 | Re: 'Dozens Hurt' In Swiss Train Collision                               |
|    15410 | Re: Flooding affects route between Looe and Liskeard                     |
|    15409 | Be careful who you swear at on the train                                 |
|    15408 | Cotswold Airport could be shut for housing                               |
|    15407 | Re: Great Train Robbery memorabilia sold at auction                      |
|    15406 | Re: London rail delays spark tweet complaints                            |
|    15405 | Community Rail Conference - notes to check                               |
|    15404 | Re: Political party transport policies heading into the general election |
|    15403 | Re: Timetables from May 2015                                             |
|    15402 | Timetables from May 2015                                                 |
|    15401 | Timetable amendments from 17th May 2015                                  |
|    15400 | Re: Up platform at Oxford blocked                                        |
|    15399 | Re: Reversal at Bath Spa                                                 |
|    15398 | Re: Landslip between Fishguard and Goodwick and Clarbeston Road          |
|    15397 | Re: Why has Lanfairpwll been rebranded Healthy-lung Village?             |
+----------+--------------------------------------------------------------------------+
20 rows in set (0.00 sec)
mysql> 


Then put it in code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
#%% Simple selector (MySQL database of 168,000 records)
# Simple selector (MySQL database of 168,000 records)
 
import mysql.connector
 
def main(config):
    output = []
    cnx = mysql.connector.connect(**config)
 
    cur = cnx.cursor()
    stmt_select = "select id_topic,subject from smf_messages group by id_topic order by id_topic desc limit 20"
    cur.execute(stmt_select)
 
    for row in cur.fetchall():
        output.append("{0:6d} - {1:s}".format(row[0], row[1]))
    cur.close()
 
    cnx.close()
    return output
 
if __name__ == '__main__':
    config = {
        'host': 'localhost',
        'port': 3306,
        'database': 'fgw',
        'user': 'root',
        'password': 'k645pfb',
        'charset': 'utf8',
        'use_unicode': True,
        'get_warnings': True,
    }
 
    out = main(config)
    print('\n'.join(out))


Complete source code at [here]

And see how that works:

trainee@kingston:~/py_sql$ python inserts.py
 15416 - Suggestion - extra early evening peak train
 15415 - Re: An extra service to Frome from May 2015.  Potential for another???
 15414 - Rules of the Road
 15413 - Re: Electric spurs?
 15412 - Re: Landslide Exeter St Davids and Tiverton Parkway 20 Feb 2015
 15411 - Re: 'Dozens Hurt' In Swiss Train Collision
 15410 - Re: Flooding affects route between Looe and Liskeard
 15409 - Be careful who you swear at on the train
 15408 - Cotswold Airport could be shut for housing
 15407 - Re: Great Train Robbery memorabilia sold at auction
 15406 - Re: London rail delays spark tweet complaints
 15405 - Community Rail Conference - notes to check
 15404 - Re: Political party transport policies heading into the general election
 15403 - Re: Timetables from May 2015
 15402 - Timetables from May 2015
 15401 - Timetable amendments from 17th May 2015
 15400 - Re: Up platform at Oxford blocked
 15399 - Re: Reversal at Bath Spa
 15398 - Re: Landslip between Fishguard and Goodwick and Clarbeston Road
 15397 - Re: Why has Lanfairpwll been rebranded Healthy-lung Village?
trainee@kingston:~/py_sql$

(written 2015-02-21)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
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)
  [663] Python to MySQL - (2006-03-31)
  [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)
  [2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
  [2790] Joining a MySQL table from within a Python program - (2010-06-02)
  [3035] How to display information from a database within a web page - (2010-11-07)
  [3099] Perl - database access - DBD, DBI and DBIx modules - (2010-12-22)
  [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)

Y113 - Python and SQL databases
  [2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
  [2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
  [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)
  [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)


Back to
Images of our rail promotion campaign
Previous and next
or
Horse's mouth home
Forward to
Adding a PHP build option, rotating an image based on camera data, and a new look at thumbnails in PHP
Some other Articles
A first graph with Matplotlib in Python
Json is the new marshall, pickle and cPickle / Python
Loving programming in Python - and ready to teach YOU how
Adding a PHP build option, rotating an image based on camera data, and a new look at thumbnails in PHP
Accessing a MySQL database from Python with mysql.connector
Images of our rail promotion campaign
Public training courses - upcoming dates
Different views of a Welsh Valley - but headed home
Java web application for teaching - now with sessions and clustering / load balancing demonstrations
A Java servlet that is also a stand alone program. And a server that is also a web client.
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4436_Acc ... ector.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb