NuFa Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 (bearbeitet) Hallo Forum, ich starte grade erst mit Python und soll Daten aus einer MS Access accdb an eine json api übergeben. Kleines Test-Skript in Python connection zur API funktioniert. Aber ich komme nicht an die Daten der accdb ran. Auf dem System ist Office 2016 installiert in 32 bit. Ich gehe davon aus das Python in 64 bit installiert ist, kann das aber nicht verifizieren weil VS Code das selbst installiert hat als ich die erste .py Datei anlegte. In VS Code selbst habe ich mit pip install myodbc den Treiber installiert, der wird mit Version 4.0.39 angezeigt. Wenn ich aber versuche mir die Treiber anzeigen zu lassen kommt null zurück. Zusammenfassend das System: Windows 10 Office 2016 32 bit VS Code 1.79.2 in VS Code Python 3.11 (mit pyp -V angezeigt) Der Code mit dem ich versuche einen Treiber zur Auswahl zu finden: import pyodbc msa_drivers = [x for x in pyodbc.drivers() if 'ACCESS' in x.upper()] print(f'MS-Access Drivers : {msa_drivers}') Ausgabe ist msa_drivers = null Wie komme ich am besten an die Daten aus Access ran? - Python in 32 bit installieren? Dann brauche ich bitte Hilfe wie das in VS Code geht, habe es noch nicht hinbekommen. - Office in 64 bit installieren? - Upgrade auf Office 2021 (aber das wäre dann sicher auch wieder 64 bit)? Bearbeitet 28. Juni 2023 von NuFa Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 vor 40 Minuten schrieb NuFa: kann das aber nicht verifizieren python -VV -> Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] vor 41 Minuten schrieb NuFa: Office in 64 bit installieren? dürfte die beste Option sein, zumindest bekomme ich mit 64bit Office und python zwei Treiber angezeigt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chris-Info Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 Ich versteh den Aufbau bei dir nicht so richtig. ich habe noch nie auf eine Access Datenbank zugegriffen, aber ein kurzer Blick auf Google verrät mir, dass das nicht anders umgesetzt ist, als mit Connectoren für z.B. SQL. import pyodbc conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Ron\Desktop\Test\test_database.accdb;') cursor = conn.cursor() cursor.execute('select * from products') for row in cursor.fetchall(): print (row) Das wäre ein Beispiel, wenn du jetzt DIREKT auf eine accdb als Datei zugreifen willst. Du erwähnst aber, dass bei dir Office 2016 in 32 bit installiert ist. Erwähnst du das, weil du NICHT direkt auf die Datei zugreifen willst, sondern weil du quasi irgendwie so gehen willst Python -> Access -> accdb ? Weil sonst wäre es absolut egal ob dein Office 32 oder 64 Bit hat, weil das nach meinem Kenntnisstand keinen Unterschied an der accdb Datei macht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 Der Unterschied ist das Office 32bit halt nur 32bit ODBC Treiber installiert und pyodbc diese nicht nutzen kann da es offenbar in 64bit installiert ist. anderes Beispiel: 64bit python -> keine Paradox Treiber verfügbar, da nicht in 64bit verfügbar, Excel schon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chris-Info Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 (bearbeitet) vor einer Stunde schrieb _n4p_: Der Unterschied ist das Office 32bit halt nur 32bit ODBC Treiber installiert und pyodbc diese nicht nutzen kann da es offenbar in 64bit installiert ist. Das ist mir ehrlich gesagt neu, dass man zum einlesen von Dateien in Python externe Treiber braucht. Üblicherweise sollte das doch mit dem Import von pydbc oder des entsprechenden datenbankconnectors erledigt sein? Aber wie gesagt ich habe mich bisher auch nur mit python auf datenbanken verbunden, die auf einem entsprechenden datenbankserver liefen. Mag sein, dass in dem Fall der Server bzw. die DBMS als Abstraktionsebene dient und Treiber darum nicht relevant sind... Edit: Scheint mit dem entsprechenden package auch unabhängig von den ODBC Treibern zu gehen, die office mitinstalliert: https://github.com/pypyodbc/pypyodbc Bearbeitet 28. Juni 2023 von Chris-Info Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 28. Juni 2023 Teilen Geschrieben 28. Juni 2023 vor 1 Stunde schrieb Chris-Info: Scheint mit dem entsprechenden package auch unabhängig von den ODBC Treibern zu gehen, die office mitinstalliert: unwahrscheinlich, da der auch einen odbc treiber benutzt. Und auch hier bekommt man verschiedene Treiberlisten je nachdem ob man die 32 oder 64 bit version von python nutzt. https://github.com/pypyodbc/pypyodbc/blob/main/pypyodbc.py#L2792 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
tkreutz2 Geschrieben 29. Juni 2023 Teilen Geschrieben 29. Juni 2023 (bearbeitet) vor 13 Stunden schrieb Chris-Info: Aber wie gesagt ich habe mich bisher auch nur mit python auf datenbanken verbunden, die auf einem entsprechenden datenbankserver liefen. Mag sein, dass in dem Fall der Server bzw. die DBMS als Abstraktionsebene dient und Treiber darum nicht relevant sind... Was spricht eigentlich dagegen, die Daten in eine Datenbank zu kopieren von der man weiß, dass man sich problemlos damit verbinden kann ? https://support.microsoft.com/de-de/office/migrieren-einer-access-datenbank-zu-sql-server-7bac0438-498a-4f53-b17b-cc22fc42c979 Edit: Ich möchte mich ungern in die Fachdiskussion einmischen, aber das wäre eigentlich meine erste Idee. Wenn es denn MS sein soll - evtl. die kostenlose Express Version vom SQL Server probieren. https://www.microsoft.com/de-DE/download/details.aspx?id=101064 Zumindest bekommt man dort ein paar Werkzeuge an die Hand. https://www.microsoft.com/de-de/download/details.aspx?id=8961 Bearbeitet 29. Juni 2023 von tkreutz2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NuFa Geschrieben 29. Juni 2023 Autor Teilen Geschrieben 29. Juni 2023 Hallo, ich hatte mir schlicht Tutorials im Netz gesucht und mich an den Beispielen entlang gearbeitet. Nachdem ich gestern Office in 64 bit installierte war es sofort möglich mit dem Code-Schnipsel den Treibernamen auszulesen. Mit der korrekten Schreibweise hat das dann auch geklappt. Man kann dann die Daten mit SQL-Statements im Code filtern und in ein Array in Python einlesen. Auf die Art war es problemlos möglich die notwendigen 16k Datensäte aus access auszulesen (geht relativ schnell). Da ich gegen die json API Anfragen mit maximal 50 Datensätzen absetzen darf bastele ich grade daran das entsprechend aufzuteilen. Es ist nur Testcode um überhaupt auf den Weg zu kommen. Ich poste den hier damit andere das auch finden können. Danke für das Engagement und Interesse an meinem Post import pyodbc from itertools import islice try: con_string = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=Pfad zu Datei;' conn = pyodbc.connect(con_string) cur = conn.cursor() cur.execute('SQL-Code;') rows = cur.fetchall() for i in range(0, len(rows), 50): batch = list(islice(rows, i, i + 50)) print(f"Split #{i // 50 + 1}") # gibt die aktuelle Nummer des Splits aus for row in batch: print(row) print(f"Total number of rows: {len(rows)}") # gibt die Gesamtanzahl der Zeilen aus except pyodbc.Error as e: print("Error in Connection") PS: Wäre wohl insgesamt sauberer wenn man statt access eine sql oder mysql db nimmt. Aber das ist halt hier grade nicht so.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.