Sourcecodes - MySQL-Zugriff mit Python

Sprachenübersicht/Python/MySQL

MySQL-Zugriff mit Python

Diese Seite wurde 20435 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: python mysql access zugriff pymsql mysqldb howto tutorial

Der MySQL-Zugriff über Python erfolgt nicht ganz intuitiv, speziell bei ehemaligen PHP-Entwicklern :)

Code:


import MySQLdb


Zunächst müssen wir das MySQL-Modul laden. Ist eine ausreichend aktuelle Version für die Distribution nicht verfügbar, muss es aus den Quellen gebaut werden. Dabei werden mindestens die Development-Pakete von MySQL und Python benötigt.
Falls eine Fehlermeldung kommt, kann man das MySQLdb-Modul hier kostenlos downloaden.

Code:


mysql_opts = {
    'host': "localhost",
    'user': "mein_user",
    'pass': "mein_pw",
    'db':   "meine_db"
    }
mysql = MySQLdb.connect(mysql_opts['host'], mysql_opts['user'], mysql_opts['pass'], mysql_opts['db'])


Nach diesen beiden Zeilen haben wir nun eine offene MySQL-Verbindung, welche wir über das Objekt mysql ansprechen können.

Code:


mysql.apilevel = "2.0"
mysql.threadsafety = 2
mysql.paramstyle = "format"


Die erste Option setzt den API-Level für die Kommunikation zwischen Python und MySQL (bis jetzt hat für mich die aktuelle Version "2.0" immer problemlos funktioniert).
Die Threadsafety-Option bekommt ihre Bedeutung erst bei Thread-Programmierung, wobei auch hier die Stufe 2 meistens passen sollte.
Das Format gibt an, wie Variablen im SQL-Befehl gekennzeichnet sind. format steht beispielsweise für den C-Syntax %s (Achtung: alles ist ein String, da auch Zahlen automatisch in '123' umgewandelt werden). Eine andere Möglichkeit wäre pyformat (entspricht: %(varname)s).

Code:


cursor = mysql.cursor()
cursor.execute("SELECT * FROM `products`")
products = cursor.fetchall()


In der ersten Zeile wird ein sogenannter 'Cursor' erstellt, mit welchem man nun auf die MySQL-DB zugreifen kann. Über mehrere Cursor können Abfragen parallelisiert werden.
Zeile zwei übergibt den SQL-Befehl wärend Zeile drei das Ergebnis einer Variable zuweist. Der Inhalt von products hat nun folgendes Format
( ('wert_von_spalte1_und_zeile1', 'wert_von_spalte2_und_zeile1'),
('wert_von_spalte1_und_zeile2', 'wert_von_spalte2_und_zeile2') )

Code:


cursor.execute("SELECT `id`, `name` FROM `customers` WHERE `product_id`=%s", products[0][0])
customer = cursor.fetchone()


Mit diesem Zweizeiler wird eine einzelne Zeile abgefragt. Das Ergebnis in customer könnte so aussehen:
( '123', 'mein name' )

Der große Vorteile liegt beim automatischen Escapen und umwandeln der Werte. So können beispielsweise MySQL-Datetime-Spalten direkt mit datetime-Objekten verglichen werden und None-Werte werden in NULL übersetzt.

Für weiterführende Informationen empfiehlt sich das Studium der in Python integrierten Hilfe, sowie der (teilweise recht unübersichtlichen) Manuals auf der Homepage.[url]

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, der Artikel kann wiederhergestellt werden.

Sprachenübersicht/Python/MySQL/MySQL-Zugriff mit Python