Видео 11 QTableWidget

Базы данных SQLite для прикладных программ на Python

Страница находится в разработке, ориентировочная дата выхода крайнего видео по теме 30.09.2018

Введение в управление базами данных для прикладных программ на Python



В предыдущих главах мы использовали файлы в форматах txt, csv, excel. для хранения данных. Это удобно для манипуляции данными малого объёма с простой структурой.

Однако, чем больше становится данных, и чем их структура более развита нам становится сложнее ими оперировать, поэтому, для повышения эффективности управления данными необходим особый механизм.

Этот механизм должен помогать в поиске данных, контролировать кто может их просматривать и модифицировать, проверять хранятся ли данные в необходимом формате.

То есть, нам необходима база данных!!!.

Существует множество типов баз данных, например, есть базы, которые хранят данные в виде словарей, таблиц, или хранят копии объектов программы. В конце концов Вы можете сконструировать свою собственную базу данных.

На сегодняшний день значительной популярностью пользуются реляционные базы данных в которых иерархия данных основывается на таблицах.

Рисунок 1.Пример иерархической структуры реляционной базы MYSQL или SQLite
Каждая из таблиц в реляционной базе данных SQLite имеет фиксированное число столбцов и переменое число строк, при этом каждому столбцу присвоено имя, а ячейки столбца заполнены данными определённого типа. (INT, REAL, STRING, BLOB, и подобными).

Данные каждой строки (они же записи, 1 строка = 1 запись) обычно связаны друг с другом по смыслу. В базу можно включить несколько таблиц. Осуществлять запросы к таблицам базы, дополнять их записями и изменять существующие записи.

В упрощённом варианте можно представить базу данных в виде файла где каждая строка - это запись, но в реальных базах данных данные хранятся в определённом форме е, поэтому прочитать их в текстовом редакторе не получится.

Функционал СУБД широк. Он помогает понять, что за значения и в каком формате записаны в базе, проследить связи между данными в различных таблицах базы, эффективно взаимодействовать с реляционными базами данных.

То есть:
-Читать из базы данные и её структуру;
-Записывать информацию;
-Обновлять уже имеющуюся информацию;
-Удалять записи или таблицы, обнулять ячейки;
-Устанавливать права пользования данными.


Существует множество СУБД, часть из них коммерческие, например, Oracle, IBM’s DB2 и Microsoft Access, а часть с открытым кодом MySQL и PostgreSQL. Подробно о плюсах и минусах различных реляционных СУБД можно посмотреть перейдя по ссылке.

Данный пример посвящён СУБД SQLite. Она не очень то быстра, чтобы оперировать гигантским ресурсами, но бесплатна и её просто использовать вместе с Python. Так как имеется стандартная - встроенная в python библиотека sqlite3.

Документацию на библиотеку sqlite3 смотрите здесь , я же постараюсь передать основную суть библиотеки в контексте решаемых задач, базовых функций для управления данными.

Итак начнём!

Чтобы осуществить запрос к базе она должна существовать, потому создадим ее. Воспользуемся для этого Python, а в частности используем библиотеку sqlite3, которая была упомянута ранее, и с которой будем работать в дальнейшем.
 
# Импортируем библиотеку для работы с СУБД SQLite 
 import sqlite3 
# Подключаемся к базе данных
 con = sqlite3.connect('PyScientist_base.db') 
# Если база не существует то создастся новая пустая база. 
 
 

Теперь, когда мы создали базу данных, нужно поместить туда какие либо записи. Это сделаем так...
 
# Создаем курсор
cur = con.cursor()
# Затем создаём таблицу в базе с именем "core_fes", при этом указываем названия колонок и тип данных для них. 
 cur.execute('CREATE TABLE core_fes(Well TEXT, Sample TEXT, Porosity FLOAT, Swr FLOAT, Permeability FLOAT)')
# Затем вносим запись в таблицу базы перечислив через запятую значения. Их должно быть столько же, сколько столбцов в таблице. 
cur.execute('INSERT INTO core_fes VALUES("Yellow snake creek", "Sample #666", 25.6, 42, 16)')
 
 
Теперь очень важный момент - пока мы не сообщили базе, что нужно сохранить изменения, они ещё не вступили в силу. Поэтому, запомним то, что изменили базу. Сделаем это посредством метода commit, который применяем к соединению с базой.
 
con.commit()
 
 
Чтобы двигаться дальше необходимо убедиться, что база данных создана корректно, и туда, как нам и требовалось помещена необходимая информация.

Для этого...

Скачиваем Database. NET (с помощью указанного программного продукта возможно просматривать базы созданные на Sqlite и нетолько), и смотрим, что получилось.

Должно получиться вот так.

рисунок таблицы в базе данных db sqlite3

Добавим ещё данных, возьмём их из xls файла. (как читать данные из Excel я рассказывал в одном из моих предыдущих уроков )

В качестве рабочего примера рассмотрим данные результатов лабораторного анализа керна (карбонатные породы).

Они представляют из себя таблицу, в которой записаны результаты лабораторного измерения ФЕС (фильтрационно-емкостных свойств) образцов горных пород.

Каждая строка таблицы характеризует набор параметров для одного образца (параметрами являются: скважина, лабораторный номер образца, глубина взятия, глубина увязки, Кп, Кпр, Кво).

Усложним ситуацию тем, что добавим пустые значения (None) там где данных нет, что ~всегда бывает.

Пример таблицы 1. xls для загрузки.

Для того, чтобы загрузить эту информацию в базу подготовим функцию с помощью которой и будем переносить данные из Excel таблицы.
 
#На вход функция принимает путь к базе и имя таблицы базы в которую нужно добавить данные.
#Также на вход будут подаваться данные предварительно экспортированные из Excel таблицы в виде двумерного списка(data) и списка заголовков(headers) 
def add_data(base_path, core_fes, data, headers) :
 for sample in core_fes
 cur.execute('INSERT INTO core_fes VALUES 
 (?, ?, ?, ?, ?,?)', (c[0], c[1], c[2], c[3], c[4], c[5], c[6]) 
 con.commit()

#Вызов функции для внесения данных из таблицы
add_records(core_fes)

 
 


Теперь данные в базе данных

Загруженная таблица CORE_FES в базе данных .db.

Cделаем запрос к базе данных причём, в выдаче запроса сделаем сортировку по скважине, затем из сделанного запроса получим данные.
  
 cur.execute('SELECT sample, well FROM core_fes ORDER BY Well'') #делаем запрос
#cur.fetchone() #Получаем строку - запись из сделанного запроса
cur.fetchall() #получаем все строки

 
 
Интегрируем базу с помощью функций в программу.

Применительно к проекту PyScientist notes база данных проекта будет располагаться в рабочей директории программы.

В базе данных будет храниться следующая информация:
1)Это прежде всего данные настроек среды, чтобы при повторном запуске программы, настройки не пропадали.
1.1 Настройки виджета импорта данных
-файл импорта и директория импорта по умолчанию.
-тип файла для импорта и параметры импорта.
-

2)Данные о таблицах с которыми работаем. в частности это данные последних загруженных таблиц.
3)
  
 cur.execute()
 
 
На этом хочу завершить эту запись. В случае наличия ошибок в записи либо если Вы считаете, что необходимо добавить в текст какие либо детали которые я не упомянул прошу писать на форуме, в комментариях к видео, мне на e-mail: sergei-dmitriev@mail.ru