IT story

SQLite 데이터베이스에 대한 테이블의 열 목록을 어떻게 얻을 수 있습니까?

hot-time 2020. 8. 31. 08:23
반응형

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

참고URL : https://stackoverflow.com/questions/604939/how-can-i-get-the-list-of-a-columns-in-a-table-for-a-sqlite-database

반응형