Zugriff auf Datenbank nicht mehr möglich

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Ynkelonium
User
Beiträge: 6
Registriert: Freitag 6. Mai 2022, 07:47

Hallo zusammen,
unter Linux 18.3 habe ich mit Python 3.5.2 (Tk.: 8.6.5 und Idle: 3.5.2) verschiedene Anwendungen mit je einer Datenbank unter SQlite3 programmiert, die bisher auch völlig problemlos funktioniert haben.
Vor wenigen Wochen bin ich dann auf Linux 21.3. umgestiegen. Als ich nun versucht habe, eine meiner Anwendungen in dieser Umgebung zu nutzen, habe ich folgende Fehlermeldung erhalten:

"============ RESTART: /home/lauber/Schreibtisch/Privatprg_python.py ============
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "/home/lauber/Schreibtisch/Privatprg_python.py", line 1946, in <module>
sqliteCon = sqlite3.connect('/media/lauber/Schreibtisch/spielwiese_aktuell.db') # = Test unter Linux21.3
sqlite3.OperationalError: unable to open database file"

Wie ich inzwischen herausgefunden habe, wird unter Linux 21.3 Python 3.10 (TK: 8.6.12 und Idle: 3.10) verwendet. Mein Gefühl sagt mir - sachliche andere Gründe konnte ich nicht finden -, dass in diesen unterschiedlichen Versionen das Problem liegt. Allerdings habe ich noch keinen Ansatz gefunden, um einer Lösung näher zu kommen.
Hat jemand schon ähnliche Probleme gehabt bzw. wer kann mir hier mit einem Hinweis/Tipp/Rat weiterhelfen.

Danke und Gruß
ynkelonium
Benutzeravatar
__blackjack__
User
Beiträge: 13565
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ynkelonium: Es gibt kein Linux Versionsnummer. Die Distribution wird irgendeinen Namen haben.

Das wird aber nicht das Problem sein, sondern dass es diesen Pfad auf dem neuen System wahrscheinlich nicht geben wird.

Was wird denn ausgegeben wenn Du folgendes in einem Terminal eingibst:

Code: Alles auswählen

ls -l /media/lauber/Schreibtisch/spielwiese_aktuell.db
Edit: Randmeberkung: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

`sqliteCon` sollte also `sqlite_con` heissen. Wobei man keine kryptischen Abkürzungen in Namen verwenden sollte, also `sqlite_connection`. Sofern es keine anderen Verbindungen gibt, kann man sich das `sqlite` sparen, also nur `connection`.

Datenbankverbindungen sollte man nach gebrauch schliessen. Um das sicherzustellen bietet sich die ``with``-Anweisung und `contextlib.closing()` an.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Ynkelonium
User
Beiträge: 6
Registriert: Freitag 6. Mai 2022, 07:47

Danke für die schnelle Reaktion.

Also zumindest ich kenne Linux Mint in erster Linie über diese Nummern, aber beides sind 64-Bit Versionen und tragen nach meinen Unterlagen je den Namen "Cinnamon".

Also normalerweise liegt die Datenbank auf einer zweiten separaten Festplatte (reine Datenplatte), auf die ich von beiden Linux-Versionen problemlos zugreifen kann. Da der Fehler aber zuerst dort aufgetreten ist, habe ich die Datenbank testweise auf meinen "Linux-Schreibtisch" verlegt. Aber der Fehler ist derselbe geblieben.

Folgende Ausgabe im Terminal ergibt sich:

"lauber@lauber-LinuxMint20:~$ ls -l /media/Lauber/Schreibtisch/spielwiese_aktuell.db
ls: Zugriff auf '/media/Schreibtisch/spielwiese_aktuell.db' nicht möglich: Datei oder Verzeichnis nicht gefunden"


Also mir selbst fehlt für dieses Ergebnis jede Erklärung. Die Datenbank liegt tatsächlich am angegebenen Ort und kann mit z.b. SQLite-Werkzeugen problemlos geöffnet und bearbeitet werden.

Im übrigen natürlich danke für die Hinweise zur Schreibweise in Python.
Benutzeravatar
sparrow
User
Beiträge: 4364
Registriert: Freitag 17. April 2009, 10:28

__blackjack__ wollte darauf hinweisen, dass du den Namen der Distribution nicht genannt hattest. Ob sich inter dem "Linux 18.3" ein Mint, Suse oder Arch verbirgt macht einen großen Unterschied.

Die Fehlermeldung aus deinem Beitrag passt nicht zum Befehl. In deinem Befehl hast du "/media/Lauber" geschrieben in der Fehlermeldung steht "/media/Schreibtisch".
Und grundsätzlich musst du schauen, ob die Datei tatsächlich dort liegt, wo du sie vermutest.
Wie genau lautet die Ausgabe von dem Befehl, den __blackjack__ angemerkt hat? Ich bim mir ziemlich sicher, dass sie von dem geposteten abweicht.
Ynkelonium
User
Beiträge: 6
Registriert: Freitag 6. Mai 2022, 07:47

Danke für den Hinweis, aber da ist mir nur beim posten der Abfrage ein Fehler unterlaufen. Das Ergebnis bzw. die Fehlermeldung ist völlig gleich, egal ob ich mit "/media/Lauber" oder "/media/Schreibtisch" abfrage. Tatsächlich liegt die Datenbank aber auf "Schreibtisch". Entschuldigung.

Aber die Ausgabe stimmt 100 %.
Benutzeravatar
sparrow
User
Beiträge: 4364
Registriert: Freitag 17. April 2009, 10:28

Wo liegt das Python Programm? Auch auf dem Schreibtisch?
Falls ja, zeigt die Fehlermeldung, dass du media mit /home verwechselst.
Benutzeravatar
__blackjack__
User
Beiträge: 13565
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ynkelonium: Naja dann existiert diese Datei unter dem Pfad ganz offensichtlich nicht. Also kann man sie dort auch nicht öffnen.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
DeaD_EyE
User
Beiträge: 1127
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Öffne ein Terminal. Dann wechsle mit cd in das Verzeichnis, in dem sich das Programm und die Datenbank befindet.
Dann pwd eingeben. Das Programm pwd gibt den aktuellen Pfad im Terminal aus. Steht auch meist bei der Eingabeaufforderung dabei.

Ein ~ verweist auf das Home-Verzeichnis das aktuell angemeldeten Benutzers. Im Verzeichnis /media sollten nur Wechseldatenträger angezeigt werden.
Falls die DB auf einem USB-Stick ist, dann ist das eine ganz schlechte Idee.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Ynkelonium
User
Beiträge: 6
Registriert: Freitag 6. Mai 2022, 07:47

Danke für die Antworten bis hierher.
Das Problem ist - zumindest im Ansatz - gelöst. Geholfen hat mir hier ganz wesentlich der Hinweis von sparrow bezüglich des Speicherortes von Programm und Datenbank.
Es scheinen sich jetzt aber wohl einige "Folgeprobleme" zu ergeben, aber da will ich schauen, dass ich diese selbst einer Lösung zuführen kann.
oldboyJR
User
Beiträge: 40
Registriert: Donnerstag 28. März 2024, 16:19

Ich kenne mich zwar nicht mit Linux besonders gut aus aber eher mit Windows. Ich benutze unter anderem in Windows Open Office weil es eine sql Anbindung hat und dazu eine Bedienoberfläche wie in Microsoft office 97. Wenn ich ein neues Windows aufsetze und Open Office installiere dann bekomme ich keine Verbindung zu den Datenbanken des Programms. Wenn man das Aufsetzen immer erst macht wenn es überfällig wird (kein Service mehr) dann vergisst man hat aber noch ein bisschen im Hinterkopf. Kurz und gut Open Office braucht eine 32 bit Java Umgebung und die Jar. Open Office hat ein Interne Programm dazu welches dann die Java Umgebung einbindet wie eine IDE Oberfläche.
Benutzeravatar
__blackjack__
User
Beiträge: 13565
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@oldboyJR: Das hat alles so überhaupt gar nichts mit diesem Thema zu tun. Hier geht es weder um Windows, noch um Office-Anwendungen, noch um Java, noch um eine Datenbank die etwas ausserhalb der Python-Standardinstallation benötigt um eine ”Verbindung” herzustellen.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten