Python und MySQLdb
An Python liebe ich die intuitive Schreibweise und die Knappheit des Codes um Probleme in nur wenigen Zeilen lösen zu können.
Heute schreibe ich kurz wie man mit Python und der Library MySQLdb einfach und schnell einen Datenbankzugriff zu einer MySQL DB herstellen kann.
Zuerst muesst Ihr sicherstellen das Python und MySQLdb installiert sind und funktionieren.
In einer Unix Umgebung könnt ihr dazu einfach ‘python’ im Terminal eingeben und dann mit ‘import MySQLdb’ die Library importieren. Sofern keine Fehlermeldung erscheint, sollte sowohl Python, also auch MySQLdb einwandfrei funktionieren.
Zuerst erstelle ich mir eine config.ini, welche die Zugangsdaten fuer die MySQL DB beinhaltet.
config.ini
[mysql] host=localhost port=8080 user=root passwd=password db=test unix_socket=/var/run/mysqld/mysqld.sock (ubuntu)
Danach schreibe ich das Python script, welches die config.ini und die MySQLdb library importiert und den Zugriff zur Datenbank herstellt.
Python Script
import MySQLdb, ConfigParser def ConnectToDB(): """Establish database connection.""" host = config.get("mysql","host") port = int(config.get("mysql","port")) user = config.get("mysql","user") passwd = config.get("mysql","passwd") db = config.get("mysql","db") unix_socket = config.get("mysql","unix_socket") conn = MySQLdb.connect (host=host, port=port, user=user, passwd=passwd, db=db, unix_socket=unix_socket) return conn def CloseDBConnection(conn): """Close DB connection.""" conn.close () def WriteValuesToDB(conn, table, colnames, colvalues): """Write Values to DB.""" cursor = conn.cursor() sql = 'INSERT INTO ' + table + ' ' + colnames + ' VALUES' + values cursor.execute(sql)
Mögliche Probleme mit Python und MySQLdb
TypeError: an integer is required
Lösung: Port muss ein Integer Wert sein. Benutze (int(config.get(“mysql”,”port”))
TypeError: connect() argument 2 must be string, not int
Lösung: Du musst die optionalen Variablen bei dem Methodenaufruf von MySQLdb.connect definieren.
conn = MySQLdb.connect (host=host, port=port, user=user, passwd=passwd, db=db, unix_socket=unix_socket)