Zugriff auf Ms Access Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Hallo,

nach etlichen Versuchen wende ich mich mal wieder hier ans Forum:

Ich möchte gerne mittels Python auf eine Datenbank Datei (*.mdb) welche lokal auf meinem PC (Windows) liegt zugreifen.

Ich habe es mit pyodbc versucht. Jedoch ohne Erfolg:

Code: Alles auswählen

import pyodbc
db_file = 'C:\temp\test.mdb'
user = ''
password = ''
odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;UID=%s;PWD=%s' % \
                (db_file, user, password)
conn = pyodbc.connect(odbc_conn_str)
Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/AccessDB_Test/Test.py", line 7, in <module>
    conn = pyodbc.connect(odbc_conn_str)
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben (0) (SQLDriverConnect)')

Process finished with exit code 1
So richtig verstehe ich das mit der Datenbank auch noch nicht. Ich muss diese ja erst "bekannt" machen. Das heißt ich gehe bei Windows in den ODBC Datenquellen Administrator und füge dort meine DB hinzu.
Bringt nur leider nichts.

Ich bräuchte glaube ich mal eine kleine Schritt für Schritt Anleitung wie ich vorzugehen habe.

Gruß
Eric
BlackJack

@Fladdie: Der Dateiname enthält nicht das was Du glaubst was er enthält:

Code: Alles auswählen

In [1]: db_file = 'C:\temp\test.mdb'

In [2]: print db_file
C:      emp     est.mdb
'\t' ist die Escape-Sequenz für ein Tabulatorzeichen. Mach aus der Zeichenkette eine „raw”-Zeichenkettenliteral (r'C:\temp\test.mdb'), oder schütze die Backslashes davor Teil einer Escape-Sequenz zu sein ('C:\\temp\\test.mdb'), oder verwende Schrägstriche ('C:/temp/test.mdb').
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Hallo BlackJack,

ups beim "schön machen" fürs Forum hab ich dass doch glatt falsch gemacht ;-)
War in meinen Tests natürlich nicht so.

Nach wie vor habe ich also den selben Fehler beim Ausführen des Codes.
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Hat keiner bisher mit Python in einer Access DB gearbeitet?
Gibt es vll ein anderes Modul welches "besser" funktioniert.

Gruß
Eric
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich hatte vor ein paar Monaten ein ähnliches Problem und letzlich leider keine zufriedenstellende Lösung gefunden. Vielleicht habe ich aber nur nicht intensiv genug gesucht. Wer weiß...
BlackJack

@Fladdie: Du könntest pypyodbc versuchen: https://code.google.com/p/pypyodbc/wiki ... s_mdb_file

Ansonsten ist das halt eine Windows/ODBC-Frage, das heisst man müsste herausfinden woran es liegt, dass der Fehler kommt. Und das kann wohl sehr breit gefächert sein. Stimmt der Driver-Name? Du hast die Datenquelle im ODBC-Administrator bekannt gemacht, also was passiert wenn Du das auch tatsächlich in der Verbindungszeichenkette verwendest? Sind die Treiber überhaupt installiert? 32-Bit oder 64-Bit? Ist das Python 32-Bit oder 64-Bit, also passen Treiber und Anwendung zusammen?
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Hallo BlackJack,

also ich habe heute nochmal alles versucht (auch pypyodbc).
Im Prinzip erhalte ich immer folgende Fehlermeldung:
'IM002', '[IM002] [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
Ich gehe also davon aus dass der Fehler von der Windows / ODBC seite kommt.
Hier mal die Fakten:
32-Bit oder 64-Bit? Ist das Python 32-Bit oder 64-Bit, also passen Treiber und Anwendung zusammen?
System: Win 8 64bit
Python: Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Sind die Treiber überhaupt installiert?
Ich gehe mal davon aus das zumindest für 32 bit die Treiber installiert sind, denn diese kann ich im 32bit ODBC Admin auswählen.
Im 64 bit ODBC Admin hatte ich anfangs keine Treiber, habe diese aber dann nachinstalliert.
Stimmt der Driver-Name?
Bin ich mir unsicher. Wo finde ich den Treiber namen heraus und wo muss ich ihn eintragen?
Du hast die Datenquelle im ODBC-Administrator bekannt gemacht, also was passiert wenn Du das auch tatsächlich in der Verbindungszeichenkette verwendest?
Kann ich dir leider nicht ganz folgen... Wo soll ich das in der Verbindungszeichenkette verwenden?

Wie du unschwer feststellst bin ich noch ziemlich ahnungslos was die ganze Geschichte mit ODBC bzw Datenbanken generell angeht.
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Hallo,

das Problem liegt mit hoher Wahrscheinlichkeit darin, das Du auf MS-Access "nur" mit 32-bit ODBC Treibern von einem 32-bit Python zugreifen kannst (Problem hatte Blackjack schon angedeutet).
In Win7-64 bit ist das Installieren der 32-bit Treiber versteckt, Du erreichst ihn nicht über das normale System Verwaltungs ODBC Menü in Win7-64-bit. Ich habe zwei Tage gesucht bis ich eine Antwort gefunden hatte. Wenn das Problem noch besteht, kann ich noch einmal suchen...

Grüße
Uwe

PS: den Hinweis, das nur 32-bit ODBC zu 32-bit Python passt hatte mir ein Hr. Lemburg von egenix.com
(die bieten auch ODBC Treiber an) gegeben.
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Hallo Uwe,

vielen Dank für deine Antwort.
Ich habe bei Win8 sowohl den 32bit ODBC Admin wie auch den 64bit ODBC Admin ausprobiert. Beide habe ich über das "Startmenü" gefunden. Bei 64bit ODBC Admin gab es ursprünglich keinen *.mdb Treiber. Diesen habe ich nachinstalliert indem ich "Microsoft Access Database Engine 2010" installiert habe http://www.microsoft.com/de-de/download ... x?id=13255

Ich denke aber das es totaler Quark ist mit 64bit ODBC Treibern zu arbeiten da mein Office Paket und somit auch Access in der 32bit Version installiert ist.

So, was mach ich jetzt. Ich verwende hier ein 64bit OS mit 64bit Python 2.7 und möchte mittels ODBC ein 32bit Access ansprechen...

EDIT: Bin mir gerade nicht mehr so richtig sicher ob ich jetzt ein 64bit Python am Rennen habe oder obs ein 32bit ist....

Gruß
Eric
Fladdie
User
Beiträge: 9
Registriert: Montag 24. Februar 2014, 08:59

Okay,

Problem ist erstmal gelöst. Es lag tatsächlich daran das ich mit einem 64bit Python in ein 32bit Access schreiben wollte. Hab mir Python jetzt zusätzlich nochmal in 32bit draufgeschmissen.

Vielen Dank an alle die geholfen haben
Eric
python_fan
User
Beiträge: 13
Registriert: Mittwoch 12. März 2008, 14:06

Hallo Fladie,

ich habe jetzt das gleiche Problem wie Du und kämpfe seit Tagen erfolglos. Ich war so verzweifelt bis ich schließlich Deinen Beitrag gelesen habe. Kannst Du näher sagen, wie Du das Problem gelöst hast? Meine Umgebung: OS: Win7 64bit, Python 2.7. Ich muss jetzt dringend das Problem lösen.

Vielen Dank!

Funy
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

python_fan hat geschrieben: Kannst Du näher sagen, wie Du das Problem gelöst hast? Meine Umgebung: OS: Win7 64bit, Python 2.7.
Steht das nicht eindeutig im Beitrag? Es geht nur 32-bit Python mit 32-bit ODBC.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Ich komme erfolgreich an Access-Datenbanken mit dem adodbapi-Modul aus pywin32, mit dem folgenden Connection string:

Code: Alles auswählen

cConnform = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};"
cAccName = r"D:\pfad\zu\meiner\datenbank\datenbankname.mdb"
connstr = cConnform.format(cAccName)
Das Zusammensetzen aus zwei Teilen ist natürlich meistens unnötig, ich habe es zwecks Übersichtlichkeit stehen gelassen.

Das geht mit 64bit-Python. Access habe ich gar nicht auf dem Rechner, ich habe die "Microsoft Access Runtime 2013" installiert; aber es ist auch schon mit der Database Engine 2010 gegangen. Da sah der Provider im connection string anders aus, leider weiß ich nicht, ob ich den noch irgendwo finde. Da hilft aber http://www.connectionstrings.com.

Die Windows-Erweiterungen findest Du hier (falls Du sie nicht ohnehin installiert hast):
http://sf.net/projects/pywin32
Und mehr zu adodbapi, samt einem korrigierten Modul und einem Link zur Dokumentation:
http://sourceforge.net/projects/adodbapi

Ich benutze Python 3.4, es müsste mit 2.7 aber genau so gehen.
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo,
da ich das gleiche Problem mit MS Access hatte (steige voll auf Python um), war meine Lösung:
- Exportieren der Tabellen als Textdatei (TAB-getrennt, ... usw.)

So kann ich solange ich MS Access noch benötige, evtl. geänderte Textdateien wieder nach MS Access zurrück importieren und die Tabellen aktualisieren.

Grüße Nobuddy
Antworten