Мне необходимо получить названия столбцов в базе данных SQLite
Мне нужно представить данные из базы данных в форме {'col_name1': 'значение', 'col_name2': 'значение'} с помощью библиотеки sqlite3 на Python. Как получить значение из таблицы я знаю, однако как получить название столбца я не понимаю. Используя PRAGMA table_info('TEST'), где 'TEST' - название моей таблицы, выводятся все данные, однако мне нужно получить лишь названия столбцов. Прошу у Вас помощи!
Ответы (2 шт):
Ну можно воспользоваться запросом:
SELECT * FROM sqlite_master; или SELECT sql FROM sqlite_master;
Поле sql таблицы sqlite_master содержит запрос которым таблица была создана, и его можно распарсить на нужные данные: название столбцов, тип столбцов, ограничения которые наложены на столбец. Но нужно учитывать, что запрос создавший нужную для анализа таблицу храниться в sqlite_master as-is то есть в первозданном виде, если там человек создавший исследуемую БД решил натыкать ненужных переносов строк, то все они там будут сохраненными. Даже комментарии которые были в коде создания таблицы будут там сохранены. По этому перед парсингом данных из этой таблицы следует очистить её от лишнего (лишние пробелы, переносы строк, возможные комментарии и та далее), а уже после этого можно проводить анализ.
p.s.: если вспомню ещё способы, то напишу) p.p.s: так же в этой таблице храниться информация о созданных индексах, представлениях, триггерах и так далее, по этому имеет смысл указывать вместе с квалификатором отбора WHERE type LIKE "table";
Из представленного Вами запроса PRAGMA table_info("TEST") можно просто убрать лишнюю информацию. Например
cur.execute('PRAGMA table_info("TEST")')
column_names = [i[1] for i in cur.fetchall()]
print(column_names)
Информация содержится в виде кортёжа (номер столбца (с нуля), название столбца, тип данных, может ли быть null, значение по умолчанию, является ли primary key)