Datenbankverbindung herstellen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Raspberry Forum,

    ich besitze Python 2.7.9 auf meinem Raspberry 3 B. Ich würde gerne nun zu Microsoft Access eine Verbindung herstellen. In der Datei befinden sich mehrere Datenbanken.
    Die Microsoft Access Datei befindet sich auf einem Windows Rechner. Zu dem Oberordner habe ich schon eine Verbindung mit meinem Raspberry.

    Wenn ich auf die Textdatei in dem Ordner zugreifen will benutzte ich: d = open("home/pi/Ordner/Oberordner/Textdatei.txt","r") und das funkitioniert.

    Ich habe schon im Internet recherchiert und habe aber immer nur Beispiele gefunden in denen der Host, das Passwort, der User und die Datenbank angegeben wird.
    Die Datenbank besitzt kein Passwort und benötigt keinen User. Wie kann ich mich genau zu der Datenbank verbinden? Oder wo muss ich den Pfad der Datei eingeben, um dann die Datenbank in der Datei auszuwählen.

    Mein Code ist momentan:

    Code
    import MySQLdb
    
    
    db = MySQLdb.connect(host="localhost",    # der Host muss immer angegeben werden, oder?
                        user="",         
                        passwd="",
                        db="Datenbankname")

    Vielen Dank im Voraus für die Antworten :D

    Mit freundlichen Grüßen
    FlashFire

  • Danke für die schnelle Antwort.

    Ich habe gedacht ich probiere es mit mysqldb, da dort die Installation fehlerlos verlief und bei pyodbc bekomme ich nach ,,pip install pyodbc" den Fehler:

    Ich könnte es auch mit pyodbc versuchen, aber dann würde ich erst Hilfe bei der Installation benötigen :s Wenn mir hier jemand weiterhelfen kann, dann versuche ich es über den Weg.

    Edit

    mit ,,pip install pypyodbc" kommt folgende Fehlermeldung:

    Einmal editiert, zuletzt von FlashFire (24. November 2016 um 09:17)

  • Vielen Dank. Nun habe ich pyodbc installiert. Ich habe zudem auch eine mögliche Antwort auf die Verbindung zu MS Access gefunden. Diese ist auf dieser Seite abgebildet:

    https://en.wikibooks.org/wiki/Python_Pr…ase_Programming

    Ich werde dies nun ausprobieren und dann eine Rückmeldung geben.

    Mit freundlichen Grüßen
    FlashFire

  • Es tut mir leid, aber ich habe nun zwei Stunden versucht den Fehler zu beseitigen, aber viele Antworten im Internet scheinen nicht zu funktionieren.

    Mein Programm sieht folgendermaßen aus:

    Code
    import pyodbc
    
    
    conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=/home/pi/planung.mdb')
    conn.close()

    Nach dem Ausführen des Programms kommt folgende Fehlermeldung:

    Code
    Traceback (most recent call last):
      File "/home/pi/Datenbankverbindung.py", line 5, in <module>
       conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=/home/pi/planung.mdb')
    Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'Microsoft Access Driver (*.mdb)' : file not found (0) (SQLDriverConnect)")

    Nun war ich auf verschiedenen Internetseiten und habe versucht den unixODBC Driver zu installieren. Dabei habe ich uinxodbc, unixodbc-bin und unixodbc-dev installiert. Leider kommt noch immer die selbe Fehlermeldung.

    Wahrscheinlich muss ich nach den Internetseiten in den Dateien odbc.ini und odbcinst.ini etwas abändern. Jedoch scheint es mir so, als würde ich damit eine eigene Datenbank erstellen, obwohl ich bereits eine besitze.

    Ich bitte deshalb um Hilfe!
    Vielen Dank im Voraus.

  • Hallo,

    die Fehlermeldung sagt "File not found", was soviel heißt wie: entweder gibt es keine Datei `planung.mdb` im Verzeichnis `/home/pi` oder das hast nicht die nötigen Rechte, um die Datei zu lesen. Beides müsstest du mal prüfen.

    Andere Frage: warum machst du das nicht auf deinem Windows-Rechner? Das wäre einfacher, als eine Datenbank, die tief in der Windows-Welt verwurzelt ist, unter Linux zu nutzen. Wenn du tatsächlich auf beiden System arbeiten musst, dann empfiehlt sich eher ein RDBMS, welche gleichermaßen Win und Linux unterstützt, wie z.B. SQLite, MariaDB oder PostgreSQL.

    Gruß, noisefloor

  • noisefloor: Wenn ich das richtig interpretiere, bezieht sich "file not found" in diesem Fall nicht auf das Datenbankfile, sondern auf den gesuchten Treiber.

    FlashFire: Das Paket odbc-mdbtools sollte einen ODBC-Treiber für den Zugriff auf MS Access-Datenbankfiles bereitstellen.

    Einmal editiert, zuletzt von Manul (24. November 2016 um 13:14)

  • die Fehlermeldung sagt "File not found", was soviel heißt wie: entweder gibt es keine Datei `planung.mdb` im Verzeichnis `/home/pi` oder das hast nicht die nötigen Rechte, um die Datei zu lesen. Beides müsstest du mal prüfen.

    Ich habe die Datei in das Verzeichnis kopiert, um damit besser arbeiten zu können. Also die Datei gibt es auf jeden Fall in dem Verzeichnis auf meinem Raspberry.
    Die Rechte müssten auch die richtigen sein, da ich das Programm über die Konsole mit "sudo python Datenbankverbindung.py" starte.
    Aus dem Grund ist vielleicht auch etwas in dem Programm falsch geschrieben, oder ich weiß nicht wie ich den Fehler beheben kann.

    Andere Frage: warum machst du das nicht auf deinem Windows-Rechner? Das wäre einfacher, als eine Datenbank, die tief in der Windows-Welt verwurzelt ist, unter Linux zu nutzen. Wenn du tatsächlich auf beiden System arbeiten musst, dann empfiehlt sich eher ein RDBMS, welche gleichermaßen Win und Linux unterstützt, wie z.B. SQLite, MariaDB oder PostgreSQL.

    Da der Raspberry als Terminal zur Datenerfassung dienen soll und die zu erfassenden Daten an einem unzugänglichen Ort für einen Windows Rechner befinden. Ich benötige in dem Programm nur eine Information, welche sich in dieser Datenbank auf einem Windows Rechner befindet. Diese Information kann sich ändern und deshalb benötige ich immer wieder eine Verbindung zu der Datenbank.
    Ich habe diese Datenbank nicht erstellt und kann somit leider nicht eine Datei auswählen, welche ein besseres Format mit besserer Linuxkompatibilität besitzt :/
    Automatisch zusammengefügt:


    noisefloor: Wenn ich das richtig interpretiere, bezieht sich "file not found" in diesem Fall nicht auf das Datenbankfile, sondern auf den gesuchten Treiber.

    @FalshFire: Das Paket odbc-mdbtools sollte einen ODBC-Treiber für den Zugriff auf MS Access-Datenbankfiles bereitstellen.

    Ja genau, das denke ich auch. Und das wird auch in den anderen Foren beschrieben, wenn man den Fehler eingibt.

    Ich habe nun das Paket installiert, jedoch kommt noch immer die selbe Fehlermeldung. Muss ich dem Programm sagen, dass es diesen Treiber verwenden soll? Wenn ja, wie mache ich das?
    ,,import odbc-mdbtools" funktioniert leider nicht :/

    Einmal editiert, zuletzt von FlashFire (24. November 2016 um 13:03)


  • ms access und linux. Kurz gesagt vergiss es. Am einfachsten ist es die Datenbank mittels mdb-export in ein csv file zu exportieren um es dann in eine Linuxfreundliche Datenbank zu zu importieren.

    Okay danke. Ich werde es auf dem Weg versuchen. Ich melde mich wieder in einem neuen Foreneintrag, wenn es nicht funktionieren sollte.

    Danke für die Hilfe!

  • ms access und linux. Kurz gesagt vergiss es.


    Ja, unbedingt vergessen... das ist wirklich keine gute Idee. Zumal es deutlich bessere Alternativen gibt.


    Am einfachsten ist es die Datenbank mittels mdb-export in ein csv file zu exportieren um es dann in eine Linuxfreundliche Datenbank zu zu importieren.

    Wenn es keine "echte" Datenbank mit eigenem Server-Dienst sein soll, sondern nur sowas wie eine Desktop-DB oder eine reine File-basierte DB, dann halte ich SQLite für die perfekte Wahl. Ich nutze sqlite bestimmt seit dem Jahr 2000, anfangs und zur der Zeit unter Windows, seit mehreren Jahren ausschließlich unter Linux. Und SQLite läuft im Gegensatz zu Access seit jeher phänomenal stabil und zufriedenstellend. Mit SQLite ist es sogar möglich, sich einen fast gleichen Komfort wie mit Access zu verschaffen. Allerdings braucht es dazu mehrere Komponenten, weil SQLite im Vergleich zu Access NUR ein DB-Backend ist... das heisst, es hat keine Benutzeroberfläche. Das macht aber gar nichts... dafür ist es eine deutlich stärkere DB als Access je sein sein. Und für das Frontend gibts perfekte Lösungen.

    Mein Rat also: SQLite! Und das braucht es:
    1. Das Admin-Tool. Gibt es für Linux und für Windows. Ich glaube, es gibt nichts besseres und einen professionellen Anspruch genügendem als "sqlite-studio". Schau es Dir bei Interesse einfach mal an: http://sqlitestudio.pl/index.rvt

    2. Um es unter Linux komfortabel zu verwenden, nutze ich natürlich Libre-Office. Da funktionieren SQL-Queries, Formulare, Berichte, Datensätze anfügen, löschen, eben alles was man so braucht. Natürlich alles echtes SQL und nicht so ein merkwürdiger MS-SQL-Dialekt, an den ich mich von damals erinnere. Der Vorteil ist hier eindeutig die Trennung von Frontend und Backend.... soll heissen, die obligatorischen Base-Schwächen wirken sich nie auf die DB aus.

    3. Um es mit Libre-Office zu verwenden ist leider auch ODBC notwendig. Das geht aber einfach. Dazu brauchst Du den Unix-ODBC-Admin und die SQLite-Runtime-Lib.

    Code
    apt install unixodbc unixodbc-bin libsqlite0

    4. Und um SQLite mit ODBCzu verbinden benötigst Du ganz am Ende natürlich auch noch den ODBC-Treiber.
    Entweder aus den Quellen, sofern das nicht zu alt ist:

    Code
    apt-cache policy libsqliteodbc
    apt-get install libsqliteodbc


    Oder alternativ von Ch.Werner den Sourcecode für den ODBC-Treiber runterladen und selber kompilieren. Das ist meine bevorzugte Lösung. Im Moment liegt die Version 0.9994 zum Download bereit.
    http://www.ch-werner.de/sqliteodbc/sqliteodbc-0.9994.tar.gz

    Ich vermute, dass es auch überhaupt kein Problem ist, in Python ein API für SQlite zu verwenden. Wenn Dir diese Alternative nicht weiterhilft... sorry... dann einfach ignorieren.

    Einmal editiert, zuletzt von WinterUnit16246 (24. November 2016 um 16:39)

  • Wenn ich FlashFire richtig verstanden habe, muss er auf die externe MS Access DB zugreifen, weil dort Informationen liegen, die sich ändern können. Macht es in diesem Fall Sinn, wenn man eine lokale SQLite3 anlegt?

    Ich bin wirklich kein MS Freund und habe mit dem Zugriff auf eine externe MS SQL auch Treiberprobleme, aber FlashFire ist nicht geholfen, wenn man die Ursache nicht klärt.

    Soweit ich bislang erforscht habe, kann man mit 'pyodbc' sowohl MS Access, als auch MS SQL ansprechen. Die Verrechtung der Treiber und .ini-Dateien würde ich gern durchleuchten.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!