SQLite 명령 줄 셸 내에서 데이터베이스 파일 열기


92

SQLite Command Line Shell을 사용하고 있습니다. 문서화 된대로 실행 파일에 대한 인수로 제공하여 데이터베이스를 열 수 있습니다.

sqlite3 data.db

명령 줄 인수로 파일을 제공하지 않고 도구 를 호출 한 후 도구 내에서 데이터베이스 파일을 여는 방법을 알 수 없습니다 (예 : Windows에서 sqlite3.exe를 두 번 클릭). 데이터베이스 파일을 지정하는 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 표기법을 계속 사용하려면 모든 '\'에 대해 이스케이프 시퀀스를 사용해야합니다.


9

다른 db 시스템에서 수행하는 것과 동일한 방법으로 이중 명명 된 테이블을 식별하기 위해 db의 이름을 사용할 수 있습니다. 고유 한 테이블 이름을 직접 사용할 수 있습니다.

select * from ttt.table_name;

또는 연결된 모든 데이터베이스의 테이블 이름이 고유 한 경우

select * from my_unique_table_name;

하지만 sqlite-shell은 수동 조회 또는 수동 데이터 조작 전용이라고 생각하므로이 방법은 더 중요하지 않습니다.

일반적으로 스크립트에서 sqlite-command-line을 사용합니다.


연결된 데이터베이스에서 테이블 이름이 동일한 경우 연결된 모든 데이터베이스에서 레코드를 가져 오는 select 문을 사용할 수 있습니까?
user826955 dec.

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는 릴리스 내역은 먼저 언급 .open2016년 10월 14일 (3.15.0)와 명령을 사용합니다.


1

왜 아무도 그 질문이 실제로 물은 것을 얻지 못했는지 궁금합니다. 데이터베이스 파일을 지정하는 SQLite 셸 도구 내의 명령무엇입니까?

sqlite db가 내 하드 디스크에 E:\ABCD\efg\mydb.db있습니다. sqlite3 명령 줄 인터페이스로 어떻게 액세스합니까? .open E:\ABCD\efg\mydb.db작동하지 않습니다. 이것이 질문 한 것입니다.

작업을 수행하는 가장 좋은 방법은

  • 1 디렉토리에있는 모든 DB 파일 (예를 들어를 복사 - 붙여 넣기 E:\ABCD\efg\mydbs)
  • 명령 줄에서 해당 디렉토리로 전환하십시오.
  • 지금 개방 sqlite3하고.open mydb.db

이렇게하면 다른 데이터베이스에 속하는 다른 테이블 에서도 조인 작업을 수행 할 수 있습니다.


먼저 시도해 보셨습니까 E:? 종종 Windows는 문자를 직접 변경하지 않고 다른 드라이브의 디렉토리를 참조하는 것을 좋아하지 않습니다.
Aaron Franke

1
예, 작동하지만 다른 데이터베이스의 다른 테이블을 조인해야 할 때는 가능하지 않습니다. 디렉토리를 종료하고 변경하면 연결된 데이터베이스가 더 이상 연결되지 않습니다.
Ritwik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.