Access-Daten mit Python lesen

Nach den Tutorials zum Einlesen von CSV– oder Excel-Dateien folgt nun ein Beispiel, in dem ich zeige, wie die Daten einer Access-Datenbank mit Python gelesen werden können.

Erforderliche Komponenten installieren

Bevor es an den eigentlichen Code geht, ist aber etwas Vorarbeit erforderlich. Da wäre zunächst das hierfür erforderliche Modul pyodbc. Falls Ihr es bisher nicht auf Eurem System habt, müßt Ihr es in der Eingabeaufforderung oder der PowerShell mit

$ pip install pyodbc

installieren.

Darüber hinaus wird die Access Database Engine benötigt. Es gibt sie in drei Versionen; diese sind:

  • die Access Database Engine 2007,
  • die Access Database Engine 2010 und
  • die Access Database Engine 2016.

Da sich die Links zur den jeweiligen Versionen hin und wieder ändern, solltet Ihr auf Microsofts Internetseite danach suchen. Gebt als Suchbegriff „Access Database Engine“ ein.

Es sollte die Version genutzt werden, die mit Eurer Access- bzw. Office-Version korrespondiert.

Die Access Database Engine 2007 gibt es nur in einer 32-Bit-Variante.

Die Access Database Engine 2010 und die Access Database Engine 2016 liegen in einer 32-Bit und einer 64-Bit-Variante vor.

Damit das Einlesen der Access-Daten funktioniert, müssen Python und die Access Database Engine in der gleichen Bit-Variante auf dem System installiert sein. Gleiches gilt für eine womöglich ebenfalls auf dem Computer installierte Version von Microsoft Office.

Das kann in der Praxis problematisch sein. Denn Microsoft Office wird grundsätzlich in der 32-Bit-Variante installiert. Nutzt Ihr ein 64-Bit-Python, dann werdet Ihr nicht weit kommen, denn in diesem Fall läßt sich die erforderliche 64-Bit-Version der Access Database Engine nicht installieren. In diesem Fall müsst Ihr entweder auf ein 32-Bit-Python oder auf ein 64-Bit-Office umstellen, um die entsprechende Access Database Engine installieren und nutzen zu können.

Um zu überprüfen, ob die Access Database Engine erkannt wird, kann man in der IDLE folgenden Code eingeben:

>>> import pyodbc
>>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]

Erhält man als Rückgabewert eine leere Liste ([]), dann wurde sie nicht erkannt. Im Erfolgsfall erscheint hingegen:

['Microsoft Access Driver (*.mdb, *.accdb)']

Datenbank lesen

Da nun alle Vorarbeit geleistet ist, kann es an das Lesen einer Access-Datenbank gehen. Dazu habe ich eine neue Python-Datei mit dem Namen „read_access_db.py“ erstellt. Außerdem habe ich eine Access-Datenbank aus den von Access bereitgestellten Vorlagen (Projekte) erstellt und in der Tabelle Projekte ein paar Werte hinzugefügt.

Zunächst wird die Bibliothek pyodbc importiert:

import pyodbc

Weiter geht es mit dem Microsoft Access Driver und dem Pfad zur Access-Datenbank:

conn_str = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=C:\Users\bodo\Documents\Projekte.accdb;'
    )

Nun wird eine Verbindung hergestellt und die Datenbank geöffnet:

# Verbindung zur Datenbank herstellen
connection = pyodbc.connect(conn_str)

# Datenbank "öffnen"
cursor = connection.cursor()

Als nächstes möchte ich demonstrieren, wie die vorhandenen Tabellen angezeigt werden:

# Vorhandene Tabellen abfragen
for table_info in cursor.tables(tableType='TABLE'):
    print(table_info.table_name)
Tabellen einer Access-Datenbank
Die in der Access-Datenbank vorhandenen Tabellen.

Den Inhalt einer Tabelle mit dem Namen “Projekte” könnte man sich folgendermaßen anzeigen lassen:

# Abfrage durchführen (für die Tabelle "Projekte")
cursor.execute('SELECT * FROM %s' % ('Projekte'))
db_data = cursor.fetchall()
Inhalt der Tabelle einer Access-Datenbank
Der Inhalt der Tabelle „Projekte“.

Und zum Schluss wird die Verbindung zur Datenbank wieder beendet:

# Verbindung zur Datenbank beenden
cursor.close()
connection.close()

Den kompletten Code könnt Ihr übrigens von Github herunterladen.

Weiterführende Links