SQLite Datenbank verschwindet regelmäßig

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    im Rahmen eines Meßtechnikprojektes für ein Windrad ( externer Link im Forum daswindrad.de: http://www.daswindrad.de/forum/viewtopic.php?f=19&t=2244&start=70) benötige ich eine Datenbank auf dem Raspberry. Ich habe SQLite3 gewählt und in der Variante 3.7.13 installiert. SQLite ist auch installiert, in der Version 2.8.17

    Jetzt stelle ich folgenden seltsamen Effekt sowohl bei SQLite3 wie auch bei SQLite fest:
    Ich kann auf der Konsole Datenbanken anlegen und mir anzeigen lassen:

    [font="Courier New"]seq name file
    --- ---- ----------------
    0 main /home/pi/test.db[/font]

    Dann kann ich Tabellen anlegen, Daten einfügen und anzeigen lassen. Genau so wie es in diversen Tutorial (auch hier im Forum) beschrieben ist.
    Wenn ich dann mit .quit SQLite3 oder SQLite beende und erneut aufrufe ist die Datenbank verschwunden:

    [font="Courier New"]seq name file
    --- ---- ----
    0 main[/font]

    Dieser Fehler tritt auf egal in welchem Verzeichnis ich arbeite, als user Pi ebenso wie als root mit sudo SQLite, und der Fehler passiert mit SQLite und mit SQLite3... :s
    Schaue ich dann mit dem Befehl ls im Verzeichnis nach finde ich sie weiterhin! Ich habe bisher nirgendwo im Internet eine ähnliche Problembeschreibung gefunden. Habt ihr eine Idee woran das liegt?

    Viele Grüße
    Siegfried

  • Hallo,

    nur `sqlite3`? Dann legst du eine nicht-persistente in-memory Datenbank an, die in der nach dem Beenden von SQLite3 weg ist.

    Der volle Aufruf `sqlite3 NAME_DER_DB.db` öffnet die Datenbank `NAME_DER_DB.db`, wobei nur im aktuellen Verzeichnis danach gesucht wird. Existiert diese nicht, wird sie angelegt.

    Gruß, noisefloor

  • Moin,

    hab da ne andere Vermutung. Führst du nach dem Einfügen der Daten in die Tabelle auch das commit aus?
    Versuch vor dem Schließen mal folgendes:

    Code
    COMMIT;

    Hier noch ein Beispiel mit Python:


    Quelle: http://raspberrywebserver.com/cgiscripting/r…ure-logger.html

  • Es ist denk ich das Problem wie es noisefloor erwähnt hat - man muss beim Aufruf des Konsolen Befehls explizit den Datenbank-Dateinamen angeben:

    Code
    root@strudel:~# sqlite3 templog.db
    SQLite version 3.7.13 2012-06-11 02:05:22
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> BEGIN;
    sqlite> CREATE TABLE temps (timestamp DATETIME, temp NUMERIC);
    sqlite> .exit
    root@strudel:~# ls -la templog.db
    -rw-r--r-- 1 root root 0 Aug 30 09:50 templog.db
    root@strudel:~#

    Die Datenbank ist zwar leer, die Datei existiert aber.

    Erst mit COMMIT; in der interaktiven sqlite Konsole wird auch etwas in die Datei geschrieben:

  • Hallo zusammen,

    den Hinweis von noisefloor konnte ich nachvollziehen. Der Aufruf von sqlite3 NAME_DER-DB.db funktioniert bei mir. Einige bestehende DBs konnte ich so öffnen und mit "[font="Courier New"].databases[/font]", "[font="Courier New"].schema[/font]", "[font="Courier New"]select[/font]", "[font="Courier New"]insert[/font]" bearbeiten. Auch nach einem Schließen und erneuten öffnen der DB waren die gemachten Änderungen noch vorhanden - also alles persistent!

    Daten werden ohne "[font="Courier New"]commit;[/font]" übernommen. Das commit generiert bei mir die Meldung:
    [font="Courier New"]Error: unknown command or invalid arguments:[/font]
    Dem gehe ich jetzt mal mit googles Hilfe hinterher.

    Meinem selbst zusammenkopierten und abgeänderten Python-Programm fehlte tatsächlich die Anweisung [font="Courier New"]conn.commit()[/font] wie hamyam beschrieben hat. Jetzt funktioniert es und schreibt zumindest die Daten dauerhaft in die Datenbank. Ich werde nochmal eure Codeschnipsel genauer lesen und mein Programm prüfen.

    Damit ist meine ursprüngliche Frage gelöst und ich bin wieder einen Schritt weiter - super, vielen Dank. :thumbs1:

    Im nächsten Schritt will ich die Daten wieder mit einem HTML-PHP-Script auslesen und als interaktive Seite darstellen. Das läuft auch noch nicht - aber da komme ich noch dahinter (hoffentlich).

    Danke :)
    Siegfried

Jetzt mitmachen!

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