In einem Kundenprojekt ergab sich die Anforderung, Daten einer bestehenden Access-Datenbank in ein anderes System zu synchronisieren. Das Problem interessierte mich, ich hatte jedoch kein gesteigertes Interesse daran, ein .NET-Programm zu schreiben (obwohl C# eine interessante Sprache ist).
Nach kurzer Recherche ergab sich, dass es problemlos möglich ist, Daten aus einer Access-Datenbank zu lesen, da man "normale" SQL-Statements auf der Datenbank ausführen kann. Noch glücklicher machte mich die Erkenntnis, dass es einen Adapter für die Programmiersprache Python gibt, welcher mit der Windows-Version von Python ausgeliefert wird.
Zur Demonstration habe ich eine einfache Access-Datenbank angelegt, welche über eine Tabelle mit dem Namen "personen" verfügt und so aussieht:

Der Zugriff auf die Access-Datenbank lässt sich in einer einfachen Klasse kapseln:
import win32com.client from pprint import pprint class AccessDB(object): def __init__(self, filename): """ Constructor. Provide the filename of the access database as a parameter (typically *.mdb). """ self._connection = win32com.client.Dispatch(r'ADODB.Connection') self._connection.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=%s;" % filename) def query(self, sql): """ Runs the provided query against the database and returns the result as a recordset. """ recordset = win32com.client.Dispatch(r'ADODB.Recordset') recordset.Open(sql, self._connection ,1 ,3) return recordset def fetch_all(self,sql): """ Runs the query against the database and fetches all results. The methods will return an array of dicts, containing the result's content. """ results = [] recordset = self.query(sql) while not recordset.EOF: single_result = {} for field in recordset.Fields: single_result[str(field.name.encode("utf-8"))] = field.Value results.append(single_result) recordset.MoveNext() return results if __name__ == '__main__': access_db = AccessDB('test.mdb') people = access_db.fetch_all("SELECT * FROM `personen`") pprint(people)
Ruft man nun oben angegebenes Skript auf, erhält man den vollständigen Inhalt der Tabelle "personen". Die Daten liegen in diesem Moment in Python vor und können nach Belieben weiterverarbeitet werden.