SQLite 데이터베이스에 대한 테이블의 열 목록을 어떻게 얻을 수 있습니까?
테이블의 열 목록을 검색하려고합니다. 데이터베이스는 SQLite의 최신 릴리스 (3.6, 저는 믿습니다)입니다. SQL 쿼리로이 작업을 수행하는 코드를 찾고 있습니다. 열과 관련된 메타 데이터에 대한 추가 보너스 포인트 (예 : 길이, 데이터 유형 등)
당신이 찾고있는 것을 데이터 사전이라고합니다. sqlite에서는 sqlite_master 테이블 (또는 뷰?)을 쿼리하여 모든 테이블 목록을 찾을 수 있습니다.
sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)
열 정보를 얻으려면 다음 pragma table_info(table_name)
문을 사용할 수 있습니다 .
sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0
pragma 문에 대한 자세한 내용은 설명서를 참조하십시오 .
다음은 간단한 방법입니다.
.schema <table>
질문은 오래되었지만 다음은 아직 언급되지 않았습니다.
많은 경우에 또 다른 편리한 방법은 다음과 같이 헤더를 켜는 것입니다.
sqlite> .headers on
그때,
sqlite> SELECT ... FROM table
출력 상단에 선택한 모든 필드 (*를 선택하면 모두)를 보여주는 헤드 라인이 표시됩니다.
sqlite 쉘로 이동하십시오.
$ sqlite3 path/to/db.sqlite3
그리고 그냥
sqlite> .schema
그리고 당신은 모든 것을 얻을 것입니다.
다음은 현재 데이터베이스의 모든 테이블과 열을 나열하는 SELECT 문입니다.
SELECT m.name as tableName,
p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
on m.name <> p.name
order by tableName, columnName
;
이것은 OP 요청에 따라 (보너스 포인트로) 각 열에 대해 얻을 수있는 열과 모든 메타 데이터와 함께 모든 테이블을 나열하는 쿼리입니다.
SELECT
m.name AS table_name,
p.cid AS col_id,
p.name AS col_name,
p.type AS col_type,
p.pk AS col_is_pk,
p.dflt_value AS col_default_val,
p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id
pragma_table_info
쿼리 작업 방법을 보여준 @David Garoutte에게 감사드립니다 .
이 쿼리를 실행하여 모든 테이블 메타 데이터를 확인합니다.
SELECT * sqlite_master WHERE type = 'table'
위를 바탕으로 한 번에 모두 할 수 있습니다.
sqlite3 yourdb.db ".schema"
그러면 효과적으로 열 목록 인 테이블을 생성 할 수있는 SQL이 제공됩니다.
I know, it’s been a long time but it’s never too late… I had a similar question with TCL as interpreter and after several search, found nothing good for me. So I propose something based on PRAGMA, knowing that your DB is “main”
db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }
And array use to obtain a list
set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
'IT story' 카테고리의 다른 글
테이블의 mysql 검사 데이터 정렬 (0) | 2020.08.31 |
---|---|
C ++에서 "using"선언의 범위는 무엇입니까? (0) | 2020.08.31 |
들어오는 모든 연결을 허용하도록 PostgreSQL을 구성하는 방법 (0) | 2020.08.31 |
Linux에서 공백을 탭으로 바꾸기 (0) | 2020.08.31 |
'반응 스크립트 시작'명령은 정확히 무엇입니까? (0) | 2020.08.30 |