Öffnen der Datenbankdatei in der SQLite-Befehlszeilen-Shell

91

Ich verwende die SQLite-Befehlszeilen-Shell . Wie dokumentiert, kann ich eine Datenbank öffnen, indem ich sie der ausführbaren Datei als Argument zur Verfügung stelle:

sqlite3 data.db

Ich kann nicht herausfinden, wie eine Datenbankdatei innerhalb des Tools geöffnet werden kann , nachdem ich sie aufgerufen habe, ohne die Datei als Befehlszeilenargument anzugeben (wenn ich beispielsweise in Windows auf sqlite3.exe doppelklicke). Wie lautet der Befehl im SQLite-Shell-Tool zum Angeben einer Datenbankdatei?

Nolan Amy
quelle

Antworten:

111

Sie können eine und noch mehrere Datenbanken anhängen und auf dieselbe Weise wie mit sqlite dbname.db damit arbeiten

sqlite3
:
sqlite> attach "mydb.sqlite" as db1;

und Sie können alle angehängten Datenbanken mit .databases sehen

Dabei wird normalerweise die Hauptleitung für die Befehlszeile db verwendet

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   
Ameise
quelle
14
Ah! Danke dir. Wie gebe ich an, auf welcher Datenbank SQLite meine Abfragen ausführen soll?
Nolan Amy
Ist es normal, ein temporäres Dataset zu erstellen, ohne erstellt zu werden?
Sie geben die Datenbank an, indem Sie dem Tabellennamen den Datenbanknamen voranstellen. Im obigen Beispiel wäre das Präfix "db1", also zBSELECT * FROM db1.tbl1;
bugmenot123
19

Ich denke, der einfachste Weg, einfach eine einzelne Datenbank zu öffnen und mit der Abfrage zu beginnen, ist:

sqlite> .open "test.db"
sqlite> SELECT * FROM table_name ... ;

Hinweis: Dies funktioniert nur für Versionen 3.8.2+

rindeal
quelle
11

Der Befehl in der Sqlite-Shell zum Öffnen einer Datenbank lautet .open

Die Syntax lautet:

sqlite> .open dbasename.db

Wenn es sich um eine neue Datenbank handelt, die Sie erstellen und öffnen möchten, ist dies der Fall

sqlite> .open --new dbasename.db

Wenn die Datenbank in einem anderen Ordner vorhanden ist, muss der Pfad wie folgt angegeben werden:

sqlite> .open D:/MainFolder/SubFolder/...database.db

In der Windows-Befehlsshell sollten Sie '\' verwenden, um ein Verzeichnis darzustellen, in SQLite-Verzeichnissen werden sie jedoch durch '/' dargestellt. Wenn Sie immer noch die Windows-Notation bevorzugen, sollten Sie für jedes '\' eine Escape-Sequenz verwenden.

Ammu
quelle
9

Auf die gleiche Weise wie in einem anderen Datenbanksystem können Sie den Namen der Datenbank zum Identifizieren von doppelt benannten Tabellen verwenden. eindeutige Tabellennamen können direkt verwendet werden.

select * from ttt.table_name;

oder wenn der Tabellenname in allen angehängten Datenbanken eindeutig ist

select * from my_unique_table_name;

Aber ich denke, das von sqlite-shell ist nur für die manuelle Suche oder manuelle Datenmanipulation und daher weniger wichtig

Normalerweise würden Sie die SQLite-Befehlszeile in einem Skript verwenden

Ameise
quelle
Ist es möglich, eine select-Anweisung zu haben, die Datensätze aus allen angehängten Datenbanken abruft, falls der Tabellenname in allen angehängten Datenbanken gleich ist?
user826955
5

Sie können den Namen der Datenbankdatei einfach in der Befehlszeile angeben:

bash-3.2 # sqlite3 UserDb.sqlite
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.

sqlite> .databases
main: /db/UserDb.sqlite

sqlite> .tables
accountLevelSettings  genres               syncedThumbs
collectionActivity    recordingFilter      thumbs
contentStatus         syncedContentStatus 

sqlite> select count(*) from genres;
10

Darüber hinaus können Sie Ihre Abfrage über die Befehlszeile ausführen:

bash-3.2 # sqlite3 UserDb.sqlite 'select count(*) from genres'
10

Sie können eine andere Datenbankdatei aus der SQLite-Shell anhängen:

sqlite> attach database 'RelDb.sqlite' as RelDb;

sqlite> .databases
main: /db/UserDb.sqlite
RelDb: /db/RelDb_1.sqlite

sqlite> .tables
RelDb.collectionRelationship  contentStatus               
RelDb.contentRelationship     genres                      
RelDb.leagueRelationship      recordingFilter             
RelDb.localizedString         syncedContentStatus         
accountLevelSettings          syncedThumbs                
collectionActivity            thumbs                      

Auf die Tabellen aus dieser 2. Datenbank kann über das Präfix der Datenbank zugegriffen werden:

sqlite> select count(*) from RelDb.localizedString;
2442

Aber wer weiß, wie mehrere Datenbankdateien über die Befehlszeile angegeben werden, um die Abfrage über die Befehlszeile auszuführen?

Alexander Gavriliuk
quelle
2
create different db files using
      >sqlite3 test1.db
sqlite> create table test1 (name text);
sqlite> insert into test1 values('sourav');
sqlite>.exit
      >sqlite3 test2.db
sqlite> create table test2 (eid integer);
sqlite> insert into test2 values (6);
sqlite>.exit
      >sqlite
SQLite version 3.8.5 2014-06-04 14:06:34
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test1.db
sqlite> select * from test1;
sourav
sqlite> .open test2.db
sqlite> select * from test1;
Error: no such table: test1
sqlite> select * from test2;
6
sqlite> .exit
      >

Thank YOU.
Sourav Ghadai
quelle
2

Ältere SQLite- Befehlszeilen-Shells ( sqlite3.exe) scheinen den .openBefehl oder eine leicht identifizierbare Alternative nicht anzubieten .

Obwohl ich keine endgültige Referenz gefunden habe, scheint es, dass der .openBefehl um Version 3.15 eingeführt wurde . Der SQLite-.open Versionsverlauf erwähnt den Befehl zuerst mit 2016-10-14 (3.15.0).

ScottWelker
quelle
1

Ich frage mich, warum niemand bekommen konnte, was die Frage tatsächlich stellte. Es wurde angegeben, wie der Befehl im SQLite-Shell-Tool lautet, um eine Datenbankdatei anzugeben.

Eine SQLite-Datenbank befindet sich auf meiner Festplatte E:\ABCD\efg\mydb.db. Wie greife ich mit der Befehlszeilenschnittstelle von sqlite3 darauf zu?.open E:\ABCD\efg\mydb.dbfunktioniert nicht. Dies ist die Frage, die gestellt wird.

Ich fand den besten Weg, die Arbeit zu erledigen, ist

  • Kopieren Sie alle Ihre DB-Dateien in 1 Verzeichnis (sagen wir E:\ABCD\efg\mydbs)
  • Wechseln Sie zu diesem Verzeichnis in Ihrer Befehlszeile
  • jetzt offen sqlite3und dann.open mydb.db

Auf diese Weise können Sie die Verknüpfungsoperation auch für verschiedene Tabellen ausführen, die zu verschiedenen Datenbanken gehören.

Ritwik
quelle
Hast du es E:zuerst versucht ? Oft mag Windows es nicht, Verzeichnisse auf anderen Laufwerken zu referenzieren, ohne den Buchstaben selbst zu ändern.
Aaron Franke
1
Ja, es funktioniert, aber das ist nicht möglich, wenn Sie verschiedene Tabellen aus verschiedenen Datenbanken verbinden müssen. Angehängte Datenbanken werden nach dem Beenden und Wechseln des Verzeichnisses nicht mehr angehängt.
Ritwik