การเปิดไฟล์ฐานข้อมูลจากภายในเชลล์บรรทัดคำสั่ง SQLite


92

ฉันใช้SQLite บรรทัดคำสั่งเชลล์ ตามที่บันทึกไว้ฉันสามารถเปิดฐานข้อมูลได้โดยส่งเป็นอาร์กิวเมนต์ให้กับไฟล์ปฏิบัติการ:

sqlite3 data.db

ฉันไม่สามารถหาวิธีเปิดไฟล์ฐานข้อมูลจากภายในเครื่องมือได้หลังจากเรียกใช้โดยไม่ได้ส่งไฟล์เป็นอาร์กิวเมนต์บรรทัดคำสั่ง (ถ้าฉันพูดให้ดับเบิลคลิก sqlite3.exe ใน Windows) คำสั่งภายในเครื่องมือเชลล์ SQLite เพื่อระบุไฟล์ฐานข้อมูลคืออะไร?

คำตอบ:


112

คุณสามารถแนบฐานข้อมูลได้มากกว่าหนึ่งฐานข้อมูลและใช้งานได้ในลักษณะเดียวกับการใช้ sqlite dbname.db

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

และคุณสามารถดูฐานข้อมูลที่แนบทั้งหมดด้วย. ฐานข้อมูล

โดยที่ปกติจะใช้ main สำหรับบรรทัดคำสั่ง 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

21

ฉันคิดว่าวิธีที่ง่ายที่สุดในการเปิดฐานข้อมูลเดียวและเริ่มการสืบค้นคือ:

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

หมายเหตุ: ใช้งานได้กับเวอร์ชัน 3.8.2+ เท่านั้น


11

คำสั่งภายใน Sqlite shell เพื่อเปิดฐานข้อมูลคือ. open

ไวยากรณ์คือ

sqlite> .open dbasename.db

หากเป็นฐานข้อมูลใหม่ที่คุณต้องการสร้างและเปิดขึ้นมาก็คือ

sqlite> .open --new dbasename.db

หากฐานข้อมูลมีอยู่ในโฟลเดอร์อื่นต้องกล่าวถึงพา ธ ดังนี้:

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

ใน Windows Command shell คุณควรใช้ '\' เพื่อแสดงไดเร็กทอรี แต่ในไดเรกทอรี SQLite จะแสดงโดย '/' หากคุณยังคงต้องการใช้สัญกรณ์ Windows คุณควรใช้ลำดับการหลีกสำหรับทุก "\"


9

เช่นเดียวกับที่คุณทำในระบบ db อื่นคุณสามารถใช้ชื่อของฐานข้อมูลเพื่อระบุตารางที่มีชื่อคู่ สามารถใช้ชื่อตารางที่ไม่ซ้ำกันได้โดยตรง

select * from ttt.table_name;

หรือถ้าชื่อตารางในฐานข้อมูลที่แนบทั้งหมดไม่ซ้ำกัน

select * from my_unique_table_name;

แต่ฉันคิดว่าของ sqlite-shell มีไว้สำหรับการค้นหาด้วยตนเองหรือการจัดการข้อมูลด้วยตนเองเท่านั้นและด้วยเหตุนี้วิธีนี้จึงไม่สำคัญยิ่งกว่า

โดยปกติคุณจะใช้ 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แรกที่กล่าวถึง.openคำสั่งกับ 2016/10/14 (3.15.0)


1

ฉันสงสัยว่าทำไมไม่มีใครเข้าใจในสิ่งที่ถามจริง มันระบุคำสั่งภายในเครื่องมือเชลล์ SQLite เพื่อระบุไฟล์ฐานข้อมูลคืออะไร?

เป็น db SQLite E:\ABCD\efg\mydb.dbอยู่บนฮาร์ดดิสก์ของฉัน ฉันจะเข้าถึงมันด้วยอินเทอร์เฟซบรรทัดคำสั่ง sqlite3 ได้อย่างไร .open E:\ABCD\efg\mydb.dbไม่สำเร็จ. นี่คือคำถามที่ถาม

ฉันพบว่าวิธีที่ดีที่สุดในการทำงานคือ

  • คัดลอกวางไฟล์ db ทั้งหมดของคุณใน 1 ไดเร็กทอรี (พูดE:\ABCD\efg\mydbs)
  • สลับไปยังไดเร็กทอรีนั้นในบรรทัดคำสั่งของคุณ
  • ตอนนี้เปิดsqlite3แล้ว.open mydb.db

ด้วยวิธีนี้คุณสามารถทำการรวมบนตารางต่างๆที่เป็นของฐานข้อมูลต่างกันได้


คุณลองE:ก่อนหรือไม่? บ่อยครั้งที่ Windows ไม่ชอบการอ้างอิงไดเร็กทอรีบนไดรฟ์อื่นโดยไม่ต้องเปลี่ยนตัวอักษรเอง
Aaron Franke

1
ใช่มันใช้งานได้ แต่จะไม่สามารถทำได้เมื่อคุณต้องเข้าร่วมตารางต่างๆจากฐานข้อมูลที่แตกต่างกัน ฐานข้อมูลที่แนบมาจะไม่ถูกแนบอีกต่อไปเมื่อคุณออกและเปลี่ยนไดเร็กทอรี
Ritwik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.