Ouverture du fichier de base de données à partir du shell de ligne de commande SQLite

91

J'utilise le shell de ligne de commande SQLite . Comme documenté, je peux ouvrir une base de données en la fournissant comme argument à l'exécutable:

sqlite3 data.db

Je ne peux pas comprendre comment ouvrir un fichier de base de données à partir de l'outil après l'avoir appelé sans fournir le fichier comme argument de ligne de commande (si je, disons, double-cliquez sur sqlite3.exe dans Windows). Quelle est la commande de l'outil shell SQLite pour spécifier un fichier de base de données?

Nolan Amy
la source

Réponses:

111

Vous pouvez attacher une et même plusieurs bases de données et travailler avec elle de la même manière qu'en utilisant sqlite dbname.db

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

et vous pouvez voir toutes les bases de données attachées avec .databases

où normalement le main est utilisé pour la base de données en ligne de commande

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   
fourmi
la source
14
Ah! Je vous remercie. Comment spécifier la base de données sur laquelle je veux que sqlite exécute mes requêtes?
Nolan Amy
Est-il normal d'émerger un jeu de données temporaire sans être créé?
Vous spécifiez la base de données en préfixant le nom de la table avec le nom de la base de données. Dans l'exemple ci-dessus, le préfixe serait "db1", donc par exempleSELECT * FROM db1.tbl1;
bugmenot123
19

Je pense que le moyen le plus simple d'ouvrir une seule base de données et de commencer à interroger est:

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

Remarque: cela ne fonctionne que pour les versions 3.8.2+

rindeal
la source
11

La commande dans le shell Sqlite pour ouvrir une base de données est .open

La syntaxe est,

sqlite> .open dbasename.db

S'il s'agit d'une nouvelle base de données que vous souhaitez créer et ouvrir, c'est

sqlite> .open --new dbasename.db

Si la base de données existe dans un dossier différent, le chemin doit être mentionné comme ceci:

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

Dans le shell de commande Windows, vous devez utiliser «\» pour représenter un répertoire, mais dans les répertoires SQLite sont représentés par «/». Si vous préférez toujours utiliser la notation Windows, vous devez utiliser une séquence d'échappement pour chaque '\'

Ammu
la source
9

De la même manière que vous le faites dans un autre système de base de données, vous pouvez utiliser le nom de la base de données pour identifier les tables à double nom. des noms de table uniques peuvent être utilisés directement.

select * from ttt.table_name;

ou si le nom de la table dans toutes les bases de données attachées est unique

select * from my_unique_table_name;

Mais je pense que le of de sqlite-shell est uniquement destiné à la recherche manuelle ou à la manipulation manuelle des données et, par conséquent, cette manière est plus sans conséquence

normalement vous utiliseriez la ligne de commande sqlite dans un script

fourmi
la source
Est-il possible d'avoir une instruction select qui récupère les enregistrements de toutes les bases de données attachées, au cas où le nom de la table serait le même dans les bases de données attachées?
user826955
5

Vous pouvez simplement spécifier le nom du fichier de base de données dans la ligne de commande:

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

De plus, vous pouvez exécuter votre requête depuis la ligne de commande:

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

Vous pouvez attacher un autre fichier de base de données à partir du shell SQLite:

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                      

Les tables de cette 2ème base de données seront accessibles via le préfixe de la base de données:

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

Mais qui sait comment spécifier plusieurs fichiers de base de données à partir de la ligne de commande pour exécuter la requête à partir de la ligne de commande?

Alexandre Gavriliuk
la source
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
la source
2

Les shells de ligne de commande SQLite plus anciens ( sqlite3.exe) ne semblent pas offrir la .opencommande ni aucune alternative facilement identifiable.

Bien que je n'ai trouvé aucune référence définitive, il semble que la .opencommande ait été introduite autour de la version 3.15 . L' historique des .openversions de SQLite mentionne d'abord la commande avec 2016-10-14 (3.15.0).

ScottWelker
la source
1

Je me demande pourquoi personne n'a pu comprendre ce que la question posait réellement. Il a déclaré Quelle est la commande dans l'outil shell SQLite pour spécifier un fichier de base de données?

Une base de données sqlite est sur mon disque dur E:\ABCD\efg\mydb.db. Comment y accéder avec l'interface de ligne de commande sqlite3?.open E:\ABCD\efg\mydb.dbne marche pas. C'est la question posée.

J'ai trouvé que la meilleure façon de faire le travail est

  • copiez-collez tous vos fichiers db dans 1 répertoire (par exemple E:\ABCD\efg\mydbs)
  • basculez vers ce répertoire dans votre ligne de commande
  • maintenant ouvert sqlite3et puis.open mydb.db

De cette façon, vous pouvez également effectuer l' opération de jointure sur différentes tables appartenant à différentes bases de données.

Ritwik
la source
Avez-vous essayé en E:premier? Souvent, Windows n'aime pas référencer des répertoires sur d'autres lecteurs sans changer la lettre vous-même.
Aaron Franke
1
Oui, cela fonctionne, mais cela ne sera pas faisable lorsque vous aurez besoin de joindre différentes tables de différentes bases de données. Les bases de données attachées ne seront plus attachées une fois que vous aurez quitté et changé de répertoire.
Ritwik