ATTACH로 열린 SQLite 데이터베이스 파일의 테이블을 나열하는 방법은 무엇입니까?


1197

SQLite 3 명령 줄 도구 의 명령으로 테이블을 첨부 한 후 SQLite 데이터베이스 파일에 테이블 및 해당 테이블 내의 행을 나열하는 데 사용할 수있는 SQL 은 무엇입니까 ?ATTACH


1
당신이 테이블의 모든 정보를 가지고이 일을하려고 http://www.sqlite.org/pragma.html#schema
Piyush

2
다음은 관심있는 경우 sqlite에 유용한 GUI입니다. sqlitestudio.pl 데이터베이스, 테이블의 세부 사항을 매우 빠르게 볼 수있는 액세스를 제공하며 멋진 쿼리 편집기도 있습니다 ...
James Oravec

17
.tables테이블 및 .schema ?TABLE?특정 테이블의 스키마.
H6.

.table 'bank_%'또는 .table '%_empl'접두사 / 접미사를 퀘스트하는 유효한 구문!
gavenkoa

답변:


576

.tables, 및 .schema"도우미"기능을 첨부 데이터베이스를 들여다 보지 않는다 : 그들은 단지 쿼리 SQLITE_MASTER"메인"데이터베이스 테이블을. 결과적으로

ATTACH some_file.db AS my_db;

그런 다음에해야합니다

SELECT name FROM my_db.sqlite_master WHERE type='table';

임시 테이블은 .tables다음 중 하나 와 함께 표시되지 않습니다 sqlite_temp_master.

SELECT name FROM sqlite_temp_master WHERE type='table';

121
오직 "SELECT name FROM sqlite_master WHERE type='table'"나를 위해 작동
vladkras

3
SELECT name FROM my_db.sqlite_master 여기서 type = 'table'; 이것은 (첨부 된 DB의 경우) 작동하지 않으며 다음과 같은 오류가 발생합니다. "my_db.sqlite_master"
kanika

임시 테이블의 의미는 무엇입니까? 방금 SQLite DB 파일을 열었습니까?
Ewoks

임시 테이블은 CREATE TEMPORARY TABLESQL 명령으로 작성된 테이블 입니다. 현재 데이터베이스 연결이 닫히면 내용이 삭제되고 데이터베이스 파일에 저장되지 않습니다.
Anthony Williams

1
sqlite3 명령 모드에서 실행하십시오 ATTACH "some_file.db" AS my_db; !
John_J

1272

SQLite 데이터베이스에서 테이블을 보려면 몇 가지 단계가 있습니다.

  1. 데이터베이스의 테이블을 나열하십시오.

    .tables
  2. 테이블 모양을 나열하십시오.

    .schema tablename
  3. 전체 테이블을 인쇄하십시오.

    SELECT * FROM tablename;
  4. 사용 가능한 모든 SQLite 프롬프트 명령을 나열하십시오.

    .help

45
.table그리고 .tables둘 다 허용됩니다. .tasqlite3이 모호하지 않은 명령을 허용하기 때문에 그 문제 도 잘 작동합니다. 도움말에 따른 명령 이름은 실제로 ".tables"입니다 (누군가 여전히주의를 기울이고있는 경우).
dbn

29
(이것은 받아 들일만한 대답이어야합니다. 일을하는 가장 sqlite-y 방법입니다).
dbn

6
.tables하나의 열린 데이터베이스를 통해 테이블을 표시하지 ATTACH '<path>' AS <name>;않지만 lasse의 답변이 표시됩니다. OP가 ATTACHing을 언급 한 이래로 그는이 답변을 받아들이지 않는 것이 옳았다 고 생각합니다. 편집 : 방금 앤서니와 다른 사람들도 이것을 지적했습니다.
antiplex

2
@dbw : 필요하지 않습니다. SQLite 또는 MySql (내 경우)을 사용할 수있는 DB 래퍼를 수행한다고 가정하십시오. 더 많은 SQL-conform 명령을 사용하면 DB 공급 업체 특정 명령을 사용하는 경우 랩핑 된 다른 언어로 포팅하기가 더 쉬워집니다.
Valentin Heinitz

"... sqlite3는 모호하지 않은 모든 명령을 허용합니다 ..."불행하게도 때때로 모호한 명령도 허용합니다. 예를 들어 ".s", ".separator"또는 ".stats"도 가능하지만 ".s"는 ".show"로 해석되며 모호한 명령을 받아들이지 않으면 가능성을 나열하지 않습니다

442

다음 과 같이 sqlite_master 테이블을 거쳐야 합니다.

SELECT * FROM dbname.sqlite_master WHERE type='table';

그런 다음 SELECT행을 확인하기 위해 각 표를 수동으로 또는 유사하게 사용하십시오.

.DUMP.SCHEMA명령은 전혀 데이터베이스를 볼 수 표시되지 않습니다.


120
미래에 사용하기 위해 읽거나 기억하기 쉬운 것이 아닙니다. 내장 .tables명령이 더 직관적입니다

24
@Gryllida : 그럼에도 불구하고 SQL-API에서 유효한 SQL이므로 사용할 수 있습니다. 내장 명령은 모든 곳에서 지원되지 않을 수 있습니다.
Valentin Heinitz

2
@DoktorJ .tables연결된 데이터베이스의 테이블을 표시하도록 수정 되었습니까?
Lasse V. Karlsen

4
해당 데이터베이스에서는 가능 하지만이 질문은 첨부 한 데이터베이스에 테이블을 표시하는 것에 관한 것입니다. .tables그것들을 보여주기 위해 명령이 수정 되었습니까?
Lasse V. Karlsen

4
도! 독해 실패 ... 어쨌든 ATTACH 참조를 잡을 수 없었습니다 ... 두번> _ <
Doktor J

162

모든 테이블을 표시하려면

SELECT name FROM sqlite_master WHERE type = "table"

모든 행을 표시하기 위해 모든 테이블을 반복하고 각 테이블에서 SELECT *를 수행 할 수 있다고 생각합니다. 하지만 어쩌면 DUMP가 당신이 추구하는 것일까 요?


16
질문을 실제로 해결 한 유일한 대답은 ... "What SQL", 명령을 사용할 수있는 것이 아니라 ... 감사합니다!
Brad Parks

또한 이것은 한 줄에 하나의 테이블 이름을 인쇄하는 반면 .tables는 테이블 이름의 여러 열을 인쇄합니다 (불쾌 / 유용하지 않음).
Shane

68

사용 .help가능한 명령을 확인하는 데 사용합니다.

.table

이 명령은 현재 데이터베이스 아래의 모든 테이블을 표시합니다.


이상하지만, 정확해야하지만 사용할 때 작동하지 않습니다
Jürgen K.

42

SQLite 명령 행에 사용할 수있는 명령이 있습니다.

.tables ?PATTERN?      List names of tables matching a LIKE pattern

다음 SQL로 변환합니다.

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1

36

테이블을 나열하려면 다음을 수행하십시오.

SELECT name FROM sqlite_master
WHERE type='table';

그래서 ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")아니요? 그것은 나를 위해 작동하지 않지만이 코드가 어디에서 실행 될지 확실하지 않습니다.
jbuddy_13


24

이 쿼리를 사용하여 가져옵니다.

SELECT name FROM sqlite_master WHERE type='table'

그리고 iOS에서 사용하려면 :

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];

16

문서 에 따르면 MySQL과 동등한 것은 다음과 같습니다 SHOW TABLES;.

".tables"명령은 목록 모드를 설정 한 후 다음 쿼리를 실행하는 것과 유사합니다.

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

그러나 단일 테이블이 존재하는지 확인하거나 세부 정보를 얻으려면 @LuizGeron 답변을 참조하십시오 .


15

최신 버전의 SQLite 3부터 다음을 실행할 수 있습니다.

.fullschema

모든 create 문을 볼 수 있습니다.


SQLite 버전 3.7.13 2012-07-17 17:46:21 지침을 보려면 ".help"를 입력하십시오. ";"로 끝나는 SQL 문을 입력하십시오. sqlite> .fullschema 오류 : 알 수없는 명령 또는 잘못된 인수 : "fullschema". 도움 ".help"를 입력
모나 잘랄에게

2
당신은 2012 년의 버전을 사용하고 있습니다
pepper

12

가장 쉬운 방법 .dump은 SQLite 3 쉘 도구를 호출 한 후 데이터베이스를 연결 하지 않고 데이터베이스를 직접 열고 명령을 사용하는 것입니다.

따라서 ... (OS 명령 줄 프롬프트가 $라고 가정) $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

OS 명령 행에서 데이터베이스를 직접여십시오.

$sqlite3 database.sqlite
sqlite3> .dump

10

를 통해 union all모든 테이블을 하나의 목록으로 결합하십시오.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'


7

SQLite의 공식 참조에 대해서는 아무도 언급하지 않았으므로 다음 제목 아래에서 참조하는 것이 도움이 될 것입니다.

https://www.sqlite.org/cli.html

이 링크에 설명 된 명령을 사용하여 데이터베이스를 조작 할 수 있습니다. 또한 Windows OS를 사용 하고 있고 명령 쉘의 위치를 ​​모르는 경우 SQLite 사이트에 있습니다.

https://www.sqlite.org/download.html

다운로드 한 후 sqlite3.exe 파일을 클릭하여 SQLite 명령 쉘을 초기화하십시오 . 초기화 될 때 기본적으로이 SQLite 세션은 디스크의 파일이 아닌 메모리 내 데이터베이스를 사용하므로 세션이 종료되면 모든 변경 사항이 유실됩니다. 영구 디스크 파일을 데이터베이스로 사용하려면 터미널 창이 시작된 직후 ".open ex1.db"명령을 입력하십시오.

위의 예제는 "ex1.db"라는 데이터베이스 파일을 열어서 사용하고 이전에 존재하지 않는 경우 작성합니다. 파일이 생각하는 디렉토리에 파일이 있는지 확인하기 위해 전체 경로 이름을 사용할 수 있습니다. 디렉토리 분리 문자로 슬래시를 사용하십시오. 즉, "c : \ work \ ex1.db"가 아닌 "c : /work/ex1.db"를 사용하십시오.

이전에 선택한 데이터베이스의 모든 테이블을 보려면 위의 링크에서 설명한 대로 .tables 명령을 입력하십시오 .

Windows에서 작업하는 경우이 sqlite.exe 파일을 다른 Python 파일과 동일한 폴더로 이동하는 것이 유용 할 수 있습니다. 이런 식으로 Python 파일에 쓰고 .db 파일에서 SQLite 셸 읽기는 동일한 경로에 있습니다.


5

".schema"코만도는 해당 테이블을 작성하는 데 사용 된 명령문을 표시하여 사용 가능한 테이블과 해당 행을 나열합니다.

sqlite> table_a 생성 (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

1

모든 데이터베이스를 보려면 .da-하나는 ' main '

이 데이터베이스의 테이블은

sqlite_master 순서와 다른 tbl_name을 1 씩 선택하십시오.

첨부 된 데이터베이스에는 ATTACH 문에서 AS로 선택한 접두사가 필요합니다 ( 예 : aa (, bb, cc ...)).

aa.sqlite_master 순서 와 다른 tbl_name을 1 선택하십시오 .

여기서도 뷰를 얻을 수 있습니다. 'order'앞에 type = 'table'인 추가를 제외하려면

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.