База данных SQLite на Raspberry Pi

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

Домашняя автоматизация с Raspberry Pi и MQTT

Нет платы Raspberry Pi? Прочитайте Лучшие стартовые наборы Raspberry Pi.

Что такое SQLite?

SQLite — это встраиваемый движок баз данных SQL. В отличие от большинства других баз данных SQL, SQLite не имеет отдельного серверного процесса. SQLite читает и записывает данные непосредственно в обычные файлы на диске. Полная база данных SQL с множеством таблиц, индексов, триггеров и представлений содержится в одном файле на диске.

Логотип SQLite

В этом руководстве показано, как установить SQLite на Raspberry Pi, а также приведены основные команды для использования SQLite в ваших проектах на RPi.

Примечание

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

Базовая настройка Raspberry Pi

Прежде чем продолжить чтение этого проекта, убедитесь, что на вашем Raspberry Pi установлена операционная система Raspbian.

Вы можете прочитать :doc:`Руководство по началу работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>` для установки Raspbian и выполнения базовой настройки.

Почему SQLite?

Вот некоторые из особенностей, которые делают SQLite отличной базой данных:

  • Полная база данных SQLite хранится в одном кроссплатформенном файле на диске

  • SQLite очень маленький и легковесный

  • SQLite является автономным (не требуются внешние зависимости)

  • SQLite не требует отдельного серверного процесса или системы для работы (бессерверный)

  • SQLite поставляется с нулевой конфигурацией (настройка не требуется)

  • SQLite является кроссплатформенным. Он доступен на UNIX (Linux, Mac OS-X, Android, iOS) и Windows (Win32, WinCE, WinRT)

Базы данных используются для хранения информации таким образом, чтобы к ней можно было быстро и легко получить доступ. В этой статье вы создадите приложение для логирования данных с Raspberry Pi, которое сохраняет показания температуры и влажности.

Установка SQLite на Raspberry Pi

SQLite на Raspberry Pi

Вы можете установить SQLite на Raspberry Pi с помощью следующей команды:

pi@raspberry:~ $ sudo apt-get install sqlite3

Вам нужно будет ввести Y и нажать Enter для подтверждения установки.

Установка SQLite на Raspberry Pi

После завершения установки библиотеки SQLite поставляются с оболочкой SQLite. Используйте следующую команду для запуска оболочки и создания базы данных:

pi@raspberry:~ $ sqlite3 sensordata.db

Файл sensordata.db теперь создан. После ввода приведённой выше команды появится приглашение, в котором вы можете вводить команды. Оболочка поддерживает два типа команд. Команды, начинающиеся с „.“, используются для управления оболочкой. Попробуйте ввести следующие команды:

sqlite> .help
Команда .help в SQLite3

С помощью команды „.help“ вы можете быстро ознакомиться со всеми поддерживаемыми командами и их использованием.

Для выхода из оболочки SQLite используйте команду „.quit“.

Файл базы данных sensordata.db

Примечание

Вы можете использовать стрелку вверх для прокрутки предыдущих команд.

Оболочка также поддерживает команды SQL, которые вы попробуете в следующем разделе.

Использование SQL для доступа к базам данных

Structured Query Language (SQL) — это язык, используемый для взаимодействия с базами данных. Он может использоваться для создания таблиц, вставки, обновления, удаления и поиска данных.

SQL работает с различными системами баз данных, такими как SQLite, MySQL и другими. SQL-операторы должны заканчиваться точкой с запятой (;).

Общепринято писать команды SQL заглавными буквами, но это не является строго обязательным. Большинство людей предпочитают использовать заглавные буквы, так как это повышает читаемость.

SQL CREATE TABLE

Начнём с создания простой таблицы с 6 столбцами, которую можно использовать для приложения логирования температуры и влажности в различных частях дома. Давайте начнём с создания таблицы:

sqlite> BEGIN;
sqlite> CREATE TABLE dhtreadings(id INTEGER PRIMARY KEY AUTOINCREMENT, temperature NUMERIC, humidity NUMERIC, currentdate DATE, currentime TIME, device TEXT);
sqlite> COMMIT;

Чтобы увидеть все таблицы, введите:

sqlite> .tables
dhtreadings

Будет возвращена только что созданная таблица с именем „dhtreadings“. Вы можете увидеть полную схему таблиц, введя:

sqlite> .fullschema
CREATE TABLE dhtreadings(id INTEGER PRIMARY KEY AUTOINCREMENT, temperature NUMERIC, humidity NUMERIC, currentdate DATE, currentime TIME, device TEXT);

SQL INSERT

Чтобы вставить новые показания температуры и влажности в базу данных, вы можете сделать следующее:

sqlite> BEGIN;
sqlite> INSERT INTO dhtreadings(temperature, humidity, currentdate, currentime, device) values(22.4, 48, date('now'), time('now'), "manual");
sqlite> COMMIT;

В следующей статье ESP8266 будет отправлять показания на веб-сервер Python, который вставляет данные в таблицу.

SQL SELECT

Для доступа к данным, хранящимся в базе данных, используется SQL-оператор SELECT:

sqlite> SELECT * FROM dhtreadings;
1|22.4|48|2017-01-26|23:43:13|manual

Пока у вас есть только одна запись, вставленная в базу данных. Вы можете вставить новую запись следующим образом:

sqlite> BEGIN;
sqlite> INSERT INTO dhtreadings(temperature, humidity, currentdate, currentime, device) values(22.5, 48.7, date('now'), time('now'), "manual");
sqlite> COMMIT;

И когда вы выполните SELECT для данных, хранящихся в таблице, он вернёт 2 записи:

sqlite> SELECT * FROM dhtreadings;
1|22.4|48|2017-01-26|23:43:13|manual
2|22.5|48.7|2017-01-26|23:43:54|manual

Для лучшего понимания вы можете сравнить таблицу SQL с таблицей Excel, которая выглядит следующим образом:

Пример таблицы базы данных в формате электронной таблицы

SQL DROP

Если вы хотите полностью удалить таблицу из базы данных, вы можете использовать команду DROP TABLE.

Предупреждение

Следующая команда полностью удалит таблицу dhtreadings:

sqlite> DROP TABLE dhtreadings;

Теперь, если вы введёте команду „.tables“:

sqlite> .tables

Она ничего не вернёт, потому что ваша таблица была полностью удалена.

Заключение

Мы лишь поверхностно рассмотрели то, что можно делать с SQLite. Узнайте, как публиковать показания датчиков с ESP8266, которые будут сохраняться в базе данных и отображаться на вашем веб-сервере Python: