Відкриття файлу бази даних із оболонки командного рядка SQLite


92

Я використовую оболонку командного рядка SQLite . Як задокументовано, я можу відкрити базу даних, надавши її як аргумент виконуваному файлу:

sqlite3 data.db

Я не можу зрозуміти, як відкрити файл бази даних у інструменті після того, як його викликати, не подавши файл як аргумент командного рядка (якщо, скажімо, двічі клацніть sqlite3.exe у Windows). Яка команда в інструменті оболонки SQLite для вказівки файлу бази даних?

Відповіді:


112

Ви можете приєднати одну і навіть більше баз даних і працювати з нею так само, як за допомогою sqlite dbname.db

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

і ви можете бачити всі вкладені бази даних із .databases

де звичайним чином основне використовується для командного рядка db

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

14
Ах! Дякую. Як вказати, в якій базі даних хочу, щоб sqlite запускав мої запити?
Нолан Емі

Чи нормально створювати тимчасовий набір даних без створення?

Ви вказуєте базу даних, ставлячи перед назвою таблиці ім'я бази даних. У наведеному вище прикладі префікс буде "db1", тому, наприклад,SELECT * FROM db1.tbl1;
bugmenot123

20

Я думаю, що найпростіший спосіб просто відкрити одну базу даних і розпочати запит:

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

Так само, як ви це робите в іншій системі баз даних, ви можете використовувати назву бази даних для ідентифікації подвійних іменних таблиць. унікальні назви таблиць можна використовувати безпосередньо.

select * from ttt.table_name;

або якщо ім’я таблиці у всіх приєднаних базах даних є унікальним

select * from my_unique_table_name;

Але я думаю, що sqlite-shell призначений лише для ручного пошуку або ручної обробки даних, і тому такий спосіб є більш незначним

як правило, ви використовуєте командний рядок sqlite у сценарії


Чи можна мати оператор 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 для вказівки файлу бази даних?

База даних 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 не любить посилатися на каталоги на інших дисках, не змінюючи букву самостійно.
Аарон Франке,

1
Так, це працює, але це буде неможливо, коли вам потрібно об’єднати різні таблиці з різних баз даних. Прикріплені бази даних більше не будуть приєднуватися після виходу та зміни каталогу.
Рітвік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.