Открытие файла базы данных из оболочки командной строки SQLite


92

Я использую оболочку командной строки SQLite . Как указано в документации, я могу открыть базу данных, указав ее в качестве аргумента исполняемого файла:

sqlite3 data.db

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

Ответы:


112

Вы можете подключить одну или несколько баз данных и работать с ними так же, как с sqlite dbname.db

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

и вы можете видеть все прикрепленные базы данных с помощью .databases

где обычно main используется для командной строки 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, вам следует использовать escape-последовательность для каждого символа '\'


9

Так же, как вы делаете это в других системах баз данных, вы можете использовать имя базы данных для идентификации таблиц с двойным именем. можно напрямую использовать уникальные имена таблиц.

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                      

Таблицы из этой второй базы данных будут доступны по префиксу базы данных:

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 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.