Sqlite Datenbank erstellen funktioniert nicht mehr(sqlite3.DatabaseError: file is not a database)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
KIKA
User
Beiträge: 4
Registriert: Freitag 1. April 2022, 21:13

Hallo,

ich bin neu hier, und habe angefangen im Selbstudium ein bisschen mit Python zu experimentieren. Hab früher ein etwas mit PHP und MySQL hantiert.
So zum üben versuche ich mir ein Haushaltsbuch zu basteln.
Um meinen Code zu testen lösche ich ab und zu die Datenbank Datei, und erzeuge mir mit folgendem Skript eine neue, leere Datenbank.

Code: Alles auswählen

import sqlite3

print(sqlite3.version)
print('-------------------------------------')
print(sqlite3.sqlite_version)
connection = sqlite3.connect("test.db")
cursor = connection.cursor()
cursor.execute("""CREATE TABLE konten (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, nummer TEXT, art INTEGER, unter INTEGER)""")
cursor.execute("""CREATE TABLE kontoarten (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)""")
cursor.execute("CREATE TABLE buchungen (id INTEGER PRIMARY KEY AUTOINCREMENT, auftragskonto TEXT, partner TEXT, partnerkonto TEXT, buchungstext TEXT, verwendungszweck TEXT, betrag REAL, datum TEXT, kommentar TEXT)")

connection.commit()
connection.close()
Das hat auch immer tadellos funktioniert. Seit heute bekomme ich aber folgende Fehlermeldung:

Code: Alles auswählen

====================== RESTART: H:\Python\Habufnath\Datenbank_erstellen.py =====================
2.6.0
-------------------------------------
3.37.2
Traceback (most recent call last):
  File "H:\Python\Habufnath\Datenbank_erstellen.py", line 8, in <module>
    cursor.execute("""CREATE TABLE konten (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, nummer TEXT, art INTEGER, unter INTEGER)""")
sqlite3.DatabaseError: file is not a database
Ich kann mir da keinen Reim drauf machen, denn die Datei wird ja hier im Programm erst neu erstellt.
Ich habe schon ein bisschen gegoogelt, da gab es einen Tip die Dateiendung weg zu lassen, das brachte nix.
Dann lasse ich mir noch die sqlite3.version anzeigen, das bringt mir aber als Laien nichts.

Hat jemand eine Ahnung was hier falsch läuft?

Gruß KIKA.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Offensichtlich existiert die Datei table.db schon und ist keine Datenbankdatei.
KIKA
User
Beiträge: 4
Registriert: Freitag 1. April 2022, 21:13

Sirius3 hat geschrieben: Freitag 1. April 2022, 22:31 Offensichtlich existiert die Datei table.db schon und ist keine Datenbankdatei.
Vielen Dank für deine Antwort.
Vor dem Start des Programms existiert sie nicht.
Wird erst mit

Code: Alles auswählen

connection = sqlite3.connect("test.db")
erzeugt.
Man kann auch firlefanz.db nehmen, das Ergebnis ist leider immer das gleiche.
Sie wird erzeugt, und dann kommt die Fehlermeldung.
KIKA
User
Beiträge: 4
Registriert: Freitag 1. April 2022, 21:13

Ich habe den Fehler gefunden!
Durch den Hinweis von @Sirius3 das die Datei schon existiert habe ich nochmal ein paar Dateinamen ausprobiert. Das brachte nichts. Dann habe ich nochmal überlegt was zu gestern anders ist.
Ich habe am Code nichts geändert, aber am Speicherort. Weil ich mal am PC und mal am Laptop sitze, musste ich meinen Ordner mit dem Programm immer zwischen den Geräten hin und herschieben.
Da ich eine FritzBox habe und noch eine alte externe HD, habe ich mir eine FritzNAS eingerichtet und die als Netzlaufwerk verbunden. Und da den Programmordner hingeschoben.
Hat auf beiden Geräten den Pfad H:\Python\Habufnath\
Und genau da funktioniert der Code nicht. Kopiere ich den hier auf die lokale HD funktioniert es.

Warum das so ist entzieht sich meiner Kenntnis.
Arbeite ich halt wieder lokal weiter.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KIKA: Datenbanken auf Netzlaufwerken sind keine gute Idee. Hast vielleicht sogar Glück gehabt, dass es so schnell gekracht hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
KIKA
User
Beiträge: 4
Registriert: Freitag 1. April 2022, 21:13

__blackjack__ hat geschrieben: Samstag 2. April 2022, 00:22 @KIKA: Datenbanken auf Netzlaufwerken sind keine gute Idee. Hast vielleicht sogar Glück gehabt, dass es so schnell gekracht hat.
Ja, das denke ich mittlerweile auch. Ist ein ständiger Lernprozess. Ich nehme das Netzlaufwerk jetzt nur noch zum Dateiaustausch.
Hat mich heute insgesamt 3 Stunden des suchen und rumprobieren gekostet. :mrgreen:
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

__blackjack__ hat geschrieben: Samstag 2. April 2022, 00:22 @KIKA: Datenbanken auf Netzlaufwerken sind keine gute Idee.
Die sqlite3 Dokumentation erklärt dass mit etwas mehr Detail unter How To Corrupt An SQLite Database File:
SQLite depends on the underlying filesystem to do locking as the documentation says it will. But some filesystems contain bugs in their locking logic such that the locks do not always behave as advertised. This is especially true of network filesystems and NFS in particular. If SQLite is used on a filesystem where the locking primitives contain bugs, and if two or more threads or processes try to access the same database at the same time, then database corruption might result.
Antworten