2012-07-25 13 views
39

ich starten sqlite3 Version 3.7.7, Unix 11.4.2 mit diesem Befehl:Ausführen SQLite Skript

sqlite3 auction.db 

wo auction.db nicht bereits erstellt.

sqlite> auction.db < create.sql; 

gibt mir diese Fehlermeldung: near "auction": syntax error

Wie kann ich das Skript ausführen?

Antwort

59

Es gibt viele Möglichkeiten, dies zu tun, ist ein Weg,:

sqlite3 auction.db

Gefolgt von:

sqlite> .read create.sql

Im Allgemeinen ist das SQLite-Projekt wirklich fantastische Dokumentation hat! Ich weiß, dass wir oft vor den Dokumenten nach Google greifen, aber im Fall von SQLite handelt es sich bei den Dokumenten wirklich um technisches Schreiben vom Feinsten. Es ist sauber, klar und prägnant.

68

Sie wollen die create.sql in sqlite3 aus der Schale ernähren, nicht von innen SQLite selbst:

$ sqlite3 auction.db < create.sql 

SQLite-Version von SQL versteht nicht < für Dateien, Shell tut.

+0

Leider sind nicht alle Schalen verstehen '<' als Eingabeumleitung. (Z. B. PowerShell.) – Alan

+0

@Alan PowerShell hat einen Mechanismus zur Eingabeumleitung, nein? Und wenn nicht, gibt es immer [bitops] (http://stackoverflow.com/a/11643733/479863) Ansatz. –

9

Um eine einfache Abfragen auszuführen und kehre zu meinem Shell-Skript, ich denke, das funktioniert gut:

echo 'SELECT * FROM some_table;' | sqlite3 example.db 
+2

Dies ist effektiv _mu ist zu kurz_'s Antwort. –

+6

@ColonelThirtyTwo Ja, das ist sehr nah an _mu ist zu kurz_'s Antwort. 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 zum Erstellen einer SQL-Datei zum Speichern des Befehls zu verwenden. – remeika

+2

@remeika Ich denke, die idiomatische Art, einen Inline-Befehl auszuführen wäre 'sqlite3 example.db 'SELECT * FROM some_table;'', anstatt ein Echo zu übertragen –

Verwandte Themen