Führen Sie das SQLite-Skript aus


98

Ich starte sqlite3 Version 3.7.7, Unix 11.4.2 mit diesem Befehl:

sqlite3 auction.db

wo Auktion.db noch nicht erstellt wurde.

sqlite> auction.db < create.sql;

gibt mir diesen Fehler: near "auction": syntax error

Wie kann ich das Skript ausführen?

Antworten:


127

Es gibt viele Möglichkeiten, dies zu tun. Eine Möglichkeit ist:

sqlite3 auction.db

Gefolgt von:

sqlite> .read create.sql

Im Allgemeinen hat das SQLite-Projekt eine wirklich fantastische Dokumentation! Ich weiß, dass wir oft vor den Dokumenten nach Google greifen, aber im Fall von SQLite sind die Dokumente wirklich technisches Schreiben von seiner besten Seite. Es ist sauber, klar und prägnant.


4
Zur Verwendung in Scritps können Sie den .readBefehl direkt über den sqlite3Befehl ausführen : sqlite3 autction.db '.read create.sql'.
Cris Luengo

144

Sie möchten das create.sqlin sqlite3die Shell einspeisen, nicht in SQLite selbst:

$ sqlite3 auction.db < create.sql

Die SQLite-Version von SQLite versteht <Dateien nicht, Ihre Shell jedoch.


1
Leider verstehen nicht alle Shells die <Eingabe um. (ZB PowerShell.)
Alan

@Alan PowerShell hat einen Mechanismus zur Umleitung von Eingaben, nicht wahr? Und wenn nicht, gibt es immer Bitops Ansatz.
Mu ist zu kurz

@ Muistooshort siehe meinen Kommentar zu Bitops. Die sqlite dot-Befehle arbeiten im sql-Anweisungsparameter, sodass Sie die gewünschte Datei lesen können, ohne auf die Umleitung von Eingaben zurückgreifen zu müssen.
Chris Becke

@ ChrisBecke sie sind verschiedene Lösungen. <Beendet die SQLite-Eingabeaufforderung sofort und gibt den Fehlercode an die Shell zurück. .read file.sqllässt die Eingabeaufforderung offen und -init file.sqlgibt immer 0 zurück, <ist also das Beste für die Skripterstellung. Außerdem ist es plattformübergreifend .readund unterstützt keine Windows-Pfade.
TWiStErRob

23

Ich denke, dass dies gut funktioniert, um einfache Abfragen auszuführen und zu meinem Shell-Skript zurückzukehren:

$ sqlite3 example.db 'SELECT * FROM some_table;'

2
Dies ist effektiv mu ist die Antwort zu kurz .
Oberst zweiunddreißig

11
@ColonelThirtyTwo Ja, das ist sehr nah an mu ist die Antwort zu kurz . Der Grund, warum ich eine zusätzliche Antwort hinzugefügt habe, war, eine Methode zum schnellen Ausführen eines Inline-Befehls zu demonstrieren, anstatt den zusätzlichen Schritt des Erstellens einer SQL-Datei zum Speichern des Befehls zu
unternehmen

5
@remeika Ich denke, der idiomatischere Weg, einen Inline-Befehl auszuführen, wäre sqlite3 example.db 'SELECT * FROM some_table;', anstatt ein Echo zu
leiten

1
Außerdem wird (nach der Bearbeitung) gezeigt, dass sqlite3Befehle gelesen werden, die nicht nur vom stdin, sondern auch vom letzten Argument ausgeführt werden sollen.
Rafael Almeida

4

Für Benutzer von PowerShell

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db

2

Wenn Sie Windows CMD verwenden, können Sie mit diesem Befehl eine Datenbank mit sqlite3 erstellen

C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"

Wenn Sie keine Datenbank mit diesem Namen haben, erstellt sqlite3 eine, und wenn Sie bereits eine haben, wird sie trotzdem ausgeführt, aber mit dem Fehler "TABLENAME existiert bereits" können Sie diesen Befehl auch verwenden, um eine bereits vorhandene zu ändern Datenbank (aber ich bin nicht sicher)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.