Membuka file database dari dalam shell baris perintah SQLite

92

Saya menggunakan SQLite Command Line Shell . Seperti yang didokumentasikan, saya bisa membuka database dengan menyediakannya sebagai argumen untuk executable:

sqlite3 data.db

Saya tidak tahu cara membuka file database dari dalam alat setelah menjalankannya tanpa menyediakan file tersebut sebagai argumen baris perintah (jika saya, katakanlah, klik dua kali sqlite3.exe di Windows). Apa perintah dalam alat shell SQLite untuk menentukan file database?

Nolan Amy
sumber

Jawaban:

112

Anda dapat melampirkan satu atau lebih database dan bekerja dengannya dengan cara yang sama seperti menggunakan sqlite dbname.db

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

dan u dapat melihat semua database terlampir dengan database

dimana secara normal main digunakan untuk baris perintah db

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   
semut
sumber
14
Ah! Terima kasih. Bagaimana cara menentukan database mana yang saya inginkan agar sqlite menjalankan kueri saya?
Nolan Amy
Apakah normal untuk memunculkan set data temp tanpa dibuat?
Anda menentukan database dengan memberi awalan nama tabel dengan nama database. Dalam contoh di atas, awalannya adalah "db1", jadi misalnyaSELECT * FROM db1.tbl1;
bugmenot123
20

Saya pikir cara paling sederhana untuk membuka satu database dan mulai membuat kueri adalah:

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

Perhatian: Ini hanya berfungsi untuk versi 3.8.2+

rindeal
sumber
11

Perintah di dalam shell Sqlite untuk membuka database adalah .open

Sintaksnya adalah,

sqlite> .open dbasename.db

Jika itu adalah database baru yang ingin Anda buat dan buka, itu

sqlite> .open --new dbasename.db

Jika database ada di folder yang berbeda, jalurnya harus disebutkan seperti ini:

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

Di shell Windows Command, Anda harus menggunakan '\' untuk mewakili direktori, tetapi di SQLite direktori diwakili oleh '/'. Jika Anda masih lebih suka menggunakan notasi Windows, Anda harus menggunakan urutan escape untuk setiap '\'

Ammu
sumber
9

Dengan cara yang sama Anda melakukannya di sistem db lain, Anda dapat menggunakan nama db untuk mengidentifikasi tabel bernama ganda. tablenames unik dapat digunakan secara langsung.

select * from ttt.table_name;

atau jika nama tabel di semua database terlampir unik

select * from my_unique_table_name;

Tapi menurut saya dari sqlite-shell hanya untuk pencarian manual atau manipulasi data manual dan oleh karena itu cara ini lebih tidak penting

biasanya Anda akan menggunakan sqlite-command-line dalam skrip

semut
sumber
Apakah mungkin memiliki pernyataan pilih yang mengambil rekaman dari semua database terlampir, jika nama tabel sama di seluruh database terlampir?
user826955
5

Anda cukup menentukan nama file database di baris perintah:

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

Selain itu, Anda dapat menjalankan kueri Anda dari baris perintah:

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

Anda dapat melampirkan file database lain dari 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                      

Tabel dari database ke-2 ini akan dapat diakses melalui prefiks database:

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

Tetapi siapa yang tahu bagaimana menentukan beberapa file database dari baris perintah untuk menjalankan kueri dari baris perintah?

Alexander Gavriliuk
sumber
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
sumber
2

Shell baris perintah SQLite yang lebih lama ( sqlite3.exe) tampaknya tidak menawarkan .openperintah atau alternatif yang mudah diidentifikasi.

Meskipun saya tidak menemukan referensi yang pasti, sepertinya .openperintah tersebut diperkenalkan sekitar versi 3.15 . The SQLite Rilis Sejarah pertama menyebutkan .openperintah dengan 2016/10/14 (3.15.0).

ScottWelker
sumber
1

Saya bertanya-tanya mengapa tidak ada yang bisa mendapatkan apa yang sebenarnya ditanyakan oleh pertanyaan itu. Ini menyatakan Apa perintah dalam alat shell SQLite untuk menentukan file database?

Sebuah sqlite db ada di hard disk saya E:\ABCD\efg\mydb.db. Bagaimana cara mengaksesnya dengan antarmuka baris perintah sqlite3? .open E:\ABCD\efg\mydb.dbtidak bekerja. Inilah pertanyaan yang diajukan.

Saya menemukan cara terbaik untuk melakukan pekerjaan itu

  • salin-tempel semua file db Anda dalam 1 direktori (katakanlah E:\ABCD\efg\mydbs)
  • beralih ke direktori itu di baris perintah Anda
  • sekarang buka sqlite3lalu.open mydb.db

Dengan cara ini Anda dapat melakukan operasi penggabungan pada tabel yang berbeda milik database yang berbeda juga.

Ritwik
sumber
Sudah coba E:dulu? Seringkali Windows tidak suka mereferensikan direktori pada drive lain tanpa mengubah hurufnya sendiri.
Aaron Franke
1
Ya itu berhasil, tetapi itu tidak akan mungkin ketika Anda perlu menggabungkan tabel yang berbeda dari database yang berbeda. Database terlampir tidak akan dilampirkan lagi setelah Anda keluar dan mengubah direktori.
Ritwik