Veritabanı dosyasını SQLite komut satırı kabuğunun içinden açma


92

Ben kullanıyorum SQLite Komut Satırı Shell . Belgelendiği gibi, yürütülebilir dosyaya argüman olarak sağlayarak bir veritabanını açabilirim:

sqlite3 data.db

Dosyayı komut satırı bağımsız değişkeni olarak sağlamadan çağırdıktan sonra aracın içinden bir veritabanı dosyasını nasıl açacağımı çözemiyorum (eğer Windows'ta sqlite3.exe'yi çift tıklatırsam). Bir veritabanı dosyası belirtmek için SQLite kabuk aracındaki komut nedir?

Yanıtlar:


112

Bir ve daha fazla veritabanı ekleyebilir ve bununla aynı sqlite dbname.db kullanarak çalışabilirsiniz.

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

ve u tüm ekli veritabanlarını .databases ile görebilirsiniz

normal şekilde main komut satırı db için kullanılır

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

14
Ah! Teşekkür ederim. Sorgularımı hangi veritabanında çalıştırmasını istediğimi nasıl belirtebilirim?
Nolan Amy

Oluşturulmadan geçici bir veri kümesi ortaya çıkarmak normal mi?

Veritabanı adını tablo adının önüne ekleyerek veritabanını belirtirsiniz. Yukarıdaki örnekte ön ek "db1" olacaktır, bu nedenle örneğinSELECT * FROM db1.tbl1;
bugmenot123

20

Bence tek bir veritabanını açmanın ve sorgulamaya başlamanın en basit yolu:

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

Uyarı: Bu yalnızca 3.8.2+ sürümleri için çalışır.


11

Sqlite kabuğundaki bir veritabanı açmak için verilen komut .open'dir.

Sözdizimi,

sqlite> .open dbasename.db

Oluşturmak ve açmak istediğiniz yeni bir veritabanı ise,

sqlite> .open --new dbasename.db

Veritabanı farklı bir klasörde mevcutsa, yol şu şekilde belirtilmelidir:

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

Windows Komut kabuğunda, bir dizini temsil etmek için '\' kullanmalısınız, ancak SQLite dizinlerinde '/' ile temsil edilir. Hala Windows gösterimini kullanmayı tercih ediyorsanız, her '\' için bir kaçış dizisi kullanmalısınız.


9

Diğer db sistemlerinde yaptığınız gibi, çift isimli tabloları tanımlamak için db'nin adını kullanabilirsiniz. benzersiz tablo adları doğrudan kullanılabilir.

select * from ttt.table_name;

veya ekli tüm veritabanlarındaki tablo adı benzersizse

select * from my_unique_table_name;

Ama bence sqlite-shell sadece manuel arama veya manuel veri manipülasyonu içindir ve bu nedenle bu yol daha önemsizdir.

normalde bir komut dosyasında sqlite-komut satırını kullanırsınız


Tablo adının ekli veritabanlarında aynı olması durumunda, ekli tüm veritabanlarından kayıtları getiren bir select deyimine sahip olmak mümkün müdür?
user826955

5

Veritabanı dosya adını komut satırında belirtebilirsiniz:

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

Ayrıca, sorgunuzu komut satırından çalıştırabilirsiniz:

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

SQLite kabuğundan başka bir veritabanı dosyası ekleyebilirsiniz:

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                      

Bu 2. veri tabanındaki tablolara veri tabanının öneki ile erişilebilir:

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

Ancak sorguyu komut satırından yürütmek için birden fazla veritabanı dosyasını komut satırından nasıl belirteceğini kim bilebilir?


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

Eski SQLite komut satırı kabukları ( sqlite3.exe) .openkomutu veya kolayca tanımlanabilen herhangi bir alternatifi sunmuyor gibi görünüyor .

Kesin bir referans bulamamama rağmen, .openkomutun 3.15 sürümü civarında tanıtıldığı görülüyor . SQLite Yayın Tarihi ilk bahseder .open2016-10-14 (3.15.0) ile komutu.


1

Sorunun gerçekte sorulduğu şeyi neden hiç kimse alamadı merak ediyorum. Bu ifade , bir veritabanı dosyası belirtmek için SQLite kabuk aracı içindeki komut nedir?

Sabit diskimde bir sqlite db var E:\ABCD\efg\mydb.db. Sqlite3 komut satırı arayüzü ile ona nasıl erişebilirim? .open E:\ABCD\efg\mydb.dbçalışmıyor. Sorulan soru buydu.

İşi yapmanın en iyi yolunu buldum

  • tüm db dosyalarınızı 1 dizine kopyalayıp yapıştırın (söyleyin E:\ABCD\efg\mydbs)
  • Komut satırınızda o dizine geçin
  • şimdi aç sqlite3ve sonra.open mydb.db

Bu şekilde birleştirme işlemini farklı veritabanlarına ait farklı tablolar üzerinde de yapabilirsiniz.


E:İlk denedin mi Çoğu zaman Windows, harfi kendiniz değiştirmeden diğer sürücülerdeki dizinlere başvurmayı sevmez.
Aaron Franke

1
Evet işe yarıyor, ancak farklı veritabanlarından farklı tabloları birleştirmeniz gerektiğinde bu mümkün olmayacak. Dizinden çıkıp dizini değiştirdiğinizde, ekli veritabanları artık eklenmeyecektir.
Ritwik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.