SQLiteコマンドラインシェル内からデータベースファイルを開く


91

SQLiteコマンドラインシェルを使用しています。文書化されているように、実行可能ファイルの引数として指定することで、データベースを開くことができます。

sqlite3 data.db

コマンドライン引数としてファイルを指定せずにデータベースファイルを呼び出した後で、ツール内からデータベースファイルを開く方法がわかりません(Windowsでsqlite3.exeをダブルクリックした場合など)。データベースファイルを指定するSQLiteシェルツール内のコマンドは何ですか?

回答:


111

sqlite dbname.dbを使用するのと同じように、1つ以上のデータベースを接続して操作できます。

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

そしてuは.databasesですべての接続されたデータベースを見ることができます

通常の方法では、メインはコマンドラインdbに使用されます

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   

14
ああ!ありがとうございました。sqliteでクエリを実行するデータベースを指定するにはどうすればよいですか?
Nolan Amy

作成されずに一時データセットが出現するのは正常ですか?

テーブル名の前にデータベース名を付けることで、データベースを指定します。上記の例では、プレフィックスは「db1」になります。たとえば、SELECT * FROM db1.tbl1;
bugmenot123

19

単一のデータベースを開いてクエリを開始する最も簡単な方法は次のとおりです。

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

注意:これはバージョン3.8.2以降でのみ機能します


11

データベースを開くためのSqliteシェル内のコマンドは.openです。

構文は、

sqlite> .open dbasename.db

作成して開きたい新しいデータベースの場合は、

sqlite> .open --new dbasename.db

データベースが別のフォルダーに存在する場合、パスは次のように指定する必要があります。

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

Windowsコマンドシェルでは、ディレクトリを表すには「\」を使用する必要がありますが、SQLiteディレクトリでは「/」で表します。それでもWindows表記を使用する場合は、すべての '\'にエスケープシーケンスを使用する必要があります。


9

他のdbシステムで行うのと同じように、ダブルネームテーブルを識別するためにdbの名前を使用できます。一意のテーブル名を直接使用できます。

select * from ttt.table_name;

または、接続されているすべてのデータベースのテーブル名が一意である場合

select * from my_unique_table_name;

しかし、私はsqlite-shellのofは手動のルックアップまたは手動のデータ操作のためだけであると思うので、この方法はより重要ではありません

通常は、スクリプトでsqlite-command-lineを使用します


接続されているすべてのデータベースでテーブル名が同じ場合に、接続されているすべてのデータベースからレコードをフェッチするselectステートメントを使用することはできますか?
user826955

5

コマンドラインでデータベースファイル名を指定するだけです。

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

さらに、コマンドラインからクエリを実行できます。

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

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                      

この2番目のデータベースのテーブルには、データベースのプレフィックスを介してアクセスできます。

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

しかし、コマンドラインからクエリを実行するためにコマンドラインから複数のデータベースファイルを指定する方法を知っている人はいますか?


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.

2

古いSQLiteコマンドラインシェル(sqlite3.exe)は、.openコマンドや簡単に識別できる代替手段を提供していないようです。

明確な参照は見つかりませんでしたが、この.openコマンドはバージョン3.15で導入されたようです。SQLiteのリリース履歴は、最初に言及している.open2016年10月14日(3.15.0)を使用してコマンドを。


1

なぜ実際に質問された内容を誰も取得できなかったのかと思います。データベースファイルを指定するSQLiteシェルツール内のコマンド何ですか?

sqlite dbが私のハードディスクにありE:\ABCD\efg\mydb.dbます。sqlite3コマンドラインインターフェースでどうやってそれにアクセスするのですか?.open E:\ABCD\efg\mydb.db動作しません。これが質問されたものです。

仕事をする最善の方法は

  • すべてのdbファイルを1つのディレクトリにコピーして貼り付けます(たとえばE:\ABCD\efg\mydbs
  • コマンドラインでそのディレクトリに切り替えます
  • 今開いsqlite3.open mydb.db

このようにして、さまざまなデータベースに属するさまざまなテーブルに対しても結合操作を実行できます。


E:最初に試しましたか?多くの場合、Windowsは自分で文字を変更せずに他のドライブのディレクトリを参照することを好みません。
アーロンフランケ

1
はい、それは機能しますが、異なるデータベースの異なるテーブルを結合する必要がある場合は実行できません。終了してディレクトリを変更すると、アタッチされたデータベースはアタッチされなくなります。
Ritwik 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.