source

SQLite 데이터베이스에 대한 테이블의 열 목록을 가져오려면 어떻게 해야 합니까?

nicesource 2023. 4. 29. 09:28
반응형

SQLite 데이터베이스에 대한 테이블의 열 목록을 가져오려면 어떻게 해야 합니까?

테이블에서 열 목록을 검색하는 중입니다.데이터베이스는 SQLite(3.6)의 최신 릴리스입니다.저는 SQL 쿼리에서 이를 수행하는 코드를 찾고 있습니다.열과 관련된 메타데이터에 대한 추가 보너스 포인트(예: 길이, 데이터 유형 등)

당신이 찾고 있는 것을 데이터 사전이라고 합니다.sqlite에서 sqlite_master 테이블(또는 view?)을 쿼리하여 모든 테이블의 목록을 찾을 수 있습니다.

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

선택한 모든 필드(*를 선택한 경우 모두)를 표시하는 헤드라인이 출력 맨 위에 표시됩니다.

다음은 현재 데이터베이스의 모든 테이블과 열을 나열하는 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
;

그냥 당신의 sqlite 쉘로 들어가세요:

$ sqlite3 path/to/db.sqlite3

그리고 그냥.

sqlite> .schema

그러면 당신은 모든 것을 얻게 될 것입니다.

이것은 모든 테이블을 해당 열과 함께 나열하고, 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

@David Garoute가 어떻게 해야 하는지 알려줘서 고마워요.pragma_table_info쿼리에서 작업합니다.

이 쿼리를 실행하여 모든 테이블 메타데이터를 확인합니다.

SELECT * FROM sqlite_master WHERE type = 'table'

위와 같은 기능을 바탕으로 모든 작업을 한 번에 수행할 수 있습니다.

sqlite3 yourdb.db ".schema"

그러면 테이블을 만들 SQL이 제공되며, 이 테이블은 열 목록입니다.

모든 열 이름을 하나의 쉼표로 구분된 문자열로 가져오려면 아래를 사용합니다.

SELECT GROUP_CONCAT(NAME,',') FROM PRAGMA_TABLE_INFO('table_name')

여기서 pragmatable_info는 select 문에 대한 pragma_table_info로 사용되며 GROUP_CONCAT는 모든 필드 이름을 하나의 문자열로 결합하는 것입니다.GROUP_CONCAT의 두 번째 매개 변수에 대해 구분 기호를 전달할 수 있습니다.

알아요, 오랜 시간이 흘렀지만 너무 늦지는 않았어요.저는 통역사로서 TCL과 비슷한 질문을 했고, 몇 번 검색해 본 결과, 저에게 좋은 것을 찾지 못했습니다.그래서 저는 당신의 DB가 "메인"이라는 것을 알고 PRUGMA에 기반한 무언가를 제안합니다.

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

목록을 얻기 위해 어레이를 사용합니다.

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

반응형