Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python, Lua, Tcl, C and C++ training - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Java, Ruby, MySQL and Linux / Tomcat systems
 
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
Y113 - Python and SQL databases
  [4537] example of SQLite using a local database file through SQLalchemy - (2015-10-14)
  [4535] SQLAlchemy - first examples with a Python Object Relationship Mapping system - (2015-10-14)
  [4445] Graphing presentations in Python - huge data, numpy and matplotlib - (2015-02-28)
  [4086] Cacheing class for Python - using a local SQLite database as a key/value store - (2013-05-14)
  [4024] SQL databases from Python - an SQLite example - (2013-03-02)
  [3139] Steering our Python courses towards wxPython, SQLite and Django - (2011-01-19)
  [3136] A framework with python - Django - first steps - (2011-01-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)
  [2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
  [2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)

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)
  [3099] Perl - database access - DBD, DBI and DBIx modules - (2010-12-22)
  [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)
  [663] Python to MySQL - (2006-03-31)
  [644] Using a MySQL database from Perl - (2006-03-13)
  [104] mysql_connect or mysql_pconnect in PHP? - (2004-10-30)


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.
4755 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., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
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: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat