мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| zadanie_3 [2024/03/09 02:09] – wikiadmin | zadanie_3 [2024/03/12 09:35] (текущий) – wikiadmin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====Задание №3==== | ====Задание №3==== | ||
| + | ==Шаг 1. SQL== | ||
| + | Основные варианты СУБД (систем управления баз данных): | ||
| - | FIXME //В ПРОЦЕССЕ// | + | * PostgreSQL |
| + | * MySQL | ||
| + | * SQLite | ||
| - | Шаг 1. SQL | + | **SQLite** – самый простой вариант создания базы данных. У SQLite нет поддержки клиент/ |
| - | Основные варианты СУБД (систем управления баз данных): | + | |
| - | • PostgreSQL | + | |
| - | • MySQL | + | |
| - | • SQLite | + | |
| - | SQLite – самый простой вариант создания базы данных. У SQLite нет поддержки клиент/ | + | |
| Для небольших баз данных SQLite – идеальный вариант. | Для небольших баз данных SQLite – идеальный вариант. | ||
| - | Шаг 2. Установка SQLite | + | ==Шаг 2. Установка SQLite== |
| Для начала необходимо установить пакет sqlite3. | Для начала необходимо установить пакет sqlite3. | ||
| Перед установкой новых пакетов рекомендуется обновить имеющиеся пакеты. Для этого выполняем команду: | Перед установкой новых пакетов рекомендуется обновить имеющиеся пакеты. Для этого выполняем команду: | ||
| - | Sudo apt update | + | <code Bash> |
| + | < | ||
| bsk23-01-student-1@BSK23-01-1: | bsk23-01-student-1@BSK23-01-1: | ||
| Get:1 file:/ | Get:1 file:/ | ||
| Строка 27: | Строка 27: | ||
| All packages are up to date. | All packages are up to date. | ||
| bsk23-01-student-1@BSK23-01-1: | bsk23-01-student-1@BSK23-01-1: | ||
| + | </ | ||
| - | sudo apt install sqlite3 | + | <code Bash>sudo apt install sqlite3</ |
| + | < | ||
| Reading package lists... Done | Reading package lists... Done | ||
| Building dependency tree... Done | Building dependency tree... Done | ||
| Строка 49: | Строка 51: | ||
| Processing triggers for man-db (2.11.2-2) ... | Processing triggers for man-db (2.11.2-2) ... | ||
| bsk23-01-student-1@BSK23-01-1: | bsk23-01-student-1@BSK23-01-1: | ||
| + | </ | ||
| - | Проверим, | + | Проверим, |
| - | apt list | grep –E ‘sqlite3.*installed’ | + | <code Bash>apt list | grep –E ‘sqlite3.*installed’</ |
| В полученном списке должны увидеть: | В полученном списке должны увидеть: | ||
| - | sqlite3/ | + | |
| - | Шаг 3. Справка по sqlite3 | + | ==Шаг 3. Справка по sqlite3== |
| - | Команда man отображает справку по использованию пакетов. Посмотрим параметры запуска sqlite3 | + | Команда |
| - | man sqlite3 | + | |
| + | Посмотрим параметры запуска sqlite3 | ||
| + | |||
| + | | ||
| + | < | ||
| SYNOPSIS | SYNOPSIS | ||
| | | ||
| + | </ | ||
| Пункты в квадратных скобках говорят о том, что при запуске SQLite мы можем (но не обязаны) указать опции, имя базы данных и запрос SQL | Пункты в квадратных скобках говорят о том, что при запуске SQLite мы можем (но не обязаны) указать опции, имя базы данных и запрос SQL | ||
| - | If the database file does not exist, it will be created. | + | |
| + | | ||
| Если при запуске sqlite укажем имя несуществующей базы данных, | Если при запуске sqlite укажем имя несуществующей базы данных, | ||
| - | Шаг 4. Создание базы данных | + | |
| + | ==Шаг 4. Создание базы данных== | ||
| Смотрим в какой директории мы сейчас находимся: | Смотрим в какой директории мы сейчас находимся: | ||
| - | pwd | + | |
| Переходим в нужную директорию с помощью команды cd. | Переходим в нужную директорию с помощью команды cd. | ||
| Запускаем SQLite с именем базы данных (пусть будет «pythondb»): | Запускаем SQLite с именем базы данных (пусть будет «pythondb»): | ||
| - | sqlite3 pythondb | + | |
| + | |||
| + | < | ||
| SQLite version 3.40.1 2022-12-28 14:03:47 | SQLite version 3.40.1 2022-12-28 14:03:47 | ||
| Enter " | Enter " | ||
| sqlite> | sqlite> | ||
| + | </ | ||
| Мы находимся в программе sqlite. Короткий текст советует нам посмотреть справку. Посмотрим: | Мы находимся в программе sqlite. Короткий текст советует нам посмотреть справку. Посмотрим: | ||
| - | sqlite> .help | + | |
| Выполним команду отображения подключенных баз данных: | Выполним команду отображения подключенных баз данных: | ||
| - | sqlite> .databases | + | |
| - | main: / | + | main: / |
| - | Шаг 5. Создание таблицы CREATE TABLE | + | ==Шаг 5. Создание таблицы CREATE TABLE== |
| Команды в SQL называют запросами. Создадим новую таблицу в нашей базе данных, | Команды в SQL называют запросами. Создадим новую таблицу в нашей базе данных, | ||
| - | Name с типом String (в этом столбце будет текст) | + | |
| - | Age с типом Int (в этом столбце будут целые числа) | + | **Name** с типом |
| - | Mac с типом String (в этом поле будем указывать MAC-адрес телефона пользователя) | + | |
| - | sqlite> CREATE TABLE users(name String, age Int, mac String); | + | **Age** с типом |
| + | |||
| + | **Mac** с типом | ||
| + | |||
| + | | ||
| Посмотрим, | Посмотрим, | ||
| - | sqlite> .tables | + | |
| - | users | + | users |
| - | Шаг 6. Заполнение данных таблицы INSERT | + | ==Шаг 6. Заполнение данных таблицы INSERT== |
| - | Добавим в созданную таблицу данные. Для этого используем SQL запрос «INSERT». Указываем, | + | Добавим в созданную таблицу данные. Для этого используем SQL запрос «INSERT». |
| - | sqlite> INSERT INTO users(name, age, mac) VALUES (' | + | |
| - | Шаг 7. Отображение данных таблицы SELECT | + | Указываем, |
| + | |||
| + | Данные задаём после «VALUES». Каждая строка в круглых скобках через запятую. | ||
| + | |||
| + | Внутри круглых скобок значения полей name (строка в кавычках) и age. «(' | ||
| + | |||
| + | | ||
| + | |||
| + | ==Шаг 7. Отображение данных таблицы SELECT== | ||
| Отобразим данные из таблицы users. Это делается SQL запросом «SELECT». После «SELECT» указывается список столбцов, | Отобразим данные из таблицы users. Это делается SQL запросом «SELECT». После «SELECT» указывается список столбцов, | ||
| + | |||
| + | < | ||
| sqlite> SELECT * FROM users; | sqlite> SELECT * FROM users; | ||
| + | |||
| Ivan|25|mac1 | Ivan|25|mac1 | ||
| Dasha|23|mac2 | Dasha|23|mac2 | ||
| Juliya|21|mac3 | Juliya|21|mac3 | ||
| + | </ | ||
| Включим отображение заголовков столбцов: | Включим отображение заголовков столбцов: | ||
| - | sqlite> .headers on | + | |
| Снова отобразим данные из таблицы users. Теперь с заголовками столбцов «name|age|mac»: | Снова отобразим данные из таблицы users. Теперь с заголовками столбцов «name|age|mac»: | ||
| + | |||
| + | < | ||
| sqlite> SELECT * FROM users; | sqlite> SELECT * FROM users; | ||
| + | |||
| name|age|mac | name|age|mac | ||
| Ivan|25|mac1 | Ivan|25|mac1 | ||
| Dasha|23|mac2 | Dasha|23|mac2 | ||
| Juliya|21|mac3 | Juliya|21|mac3 | ||
| + | </ | ||
| Для того, чтобы выбрать только один столбец в списке полей вместо «*» нужно написать название столбца: | Для того, чтобы выбрать только один столбец в списке полей вместо «*» нужно написать название столбца: | ||
| + | |||
| + | < | ||
| sqlite> SELECT name FROM users; | sqlite> SELECT name FROM users; | ||
| + | |||
| name | name | ||
| Ivan | Ivan | ||
| Dasha | Dasha | ||
| Juliya | Juliya | ||
| + | </ | ||
| Можно указать несколько столбцов через запятую. Столбцы будут отображаться в указанном в запросе порядке: | Можно указать несколько столбцов через запятую. Столбцы будут отображаться в указанном в запросе порядке: | ||
| + | |||
| + | < | ||
| sqlite> SELECT age,name FROM users; | sqlite> SELECT age,name FROM users; | ||
| + | |||
| age|name | age|name | ||
| 25|Ivan | 25|Ivan | ||
| 23|Dasha | 23|Dasha | ||
| 21|Juliya | 21|Juliya | ||
| + | </ | ||
| - | Шаг | + | ==Шаг |
| Выберем не все данные, | Выберем не все данные, | ||
| + | |||
| + | <code SQLite> | ||
| sqlite> SELECT age,name FROM users WHERE age<24; | sqlite> SELECT age,name FROM users WHERE age<24; | ||
| + | |||
| age|name | age|name | ||
| 23|Dasha | 23|Dasha | ||
| 21|Juliya | 21|Juliya | ||
| + | </ | ||
| Получили только 2 записи, | Получили только 2 записи, | ||
| Можно выполнить поиск по конкретному условию: | Можно выполнить поиск по конкретному условию: | ||
| + | |||
| + | <code SQLite> | ||
| sqlite> SELECT name,age FROM users WHERE name=’Juliya’; | sqlite> SELECT name,age FROM users WHERE name=’Juliya’; | ||
| + | |||
| name|age | name|age | ||
| Juliya|21 | Juliya|21 | ||
| + | </ | ||
| - | Шаг | + | ==Шаг |
| Создадим вторую таблицу. Это будет таблица MAC-адресов активных регистраций устройств WiFi-роутера с уровнями сигналов: | Создадим вторую таблицу. Это будет таблица MAC-адресов активных регистраций устройств WiFi-роутера с уровнями сигналов: | ||
| - | sqlite> CREATE TABLE registrations (mac String, signal String); | + | |
| Посмотрим обновленный список таблиц в нашей базе данных: | Посмотрим обновленный список таблиц в нашей базе данных: | ||
| + | |||
| + | < | ||
| sqlite> .tables | sqlite> .tables | ||
| + | |||
| registrations users | registrations users | ||
| + | </ | ||
| Пока добавим в таблицу registrations данные вручную (в дальнейшем нам нужно будет автоматически записывать данные, | Пока добавим в таблицу registrations данные вручную (в дальнейшем нам нужно будет автоматически записывать данные, | ||
| - | sqlite> INSERT INTO registrations (mac, signal) VALUES (' | + | |
| + | | ||
| Отобразим данные из этой таблицы: | Отобразим данные из этой таблицы: | ||
| + | |||
| + | < | ||
| sqlite> SELECT * FROM registrations; | sqlite> SELECT * FROM registrations; | ||
| + | |||
| mac|signal | mac|signal | ||
| mac3|-72 | mac3|-72 | ||
| mac1|-85 | mac1|-85 | ||
| mac5|-69 | mac5|-69 | ||
| + | </ | ||
| - | Шаг | + | ==Шаг |
| Теперь наша задача – связать 2 таблицы: | Теперь наша задача – связать 2 таблицы: | ||
| + | |||
| + | < | ||
| sqlite> SELECT * FROM users, registrations WHERE users.mac = registrations.mac; | sqlite> SELECT * FROM users, registrations WHERE users.mac = registrations.mac; | ||
| + | |||
| name|age|mac|mac|signal | name|age|mac|mac|signal | ||
| Ivan|25|mac1|mac1|-85 | Ivan|25|mac1|mac1|-85 | ||
| Juliya|21|mac3|mac3|-72 | Juliya|21|mac3|mac3|-72 | ||
| + | </ | ||
| Мы получили строки обеих таблиц, | Мы получили строки обеих таблиц, | ||
| Можно выбрать не все столбцы, | Можно выбрать не все столбцы, | ||
| + | < | ||
| sqlite> SELECT users.name, registrations.signal FROM users, registrations WHERE users.mac = registrations.mac; | sqlite> SELECT users.name, registrations.signal FROM users, registrations WHERE users.mac = registrations.mac; | ||
| + | |||
| name|signal | name|signal | ||
| Ivan|-85 | Ivan|-85 | ||
| Juliya|-72 | Juliya|-72 | ||
| + | </ | ||
| Для начала нам этого хватит. Мы вернемся в SQLite когда будем создавать таблицу пользователей WiFi роутера. | Для начала нам этого хватит. Мы вернемся в SQLite когда будем создавать таблицу пользователей WiFi роутера. | ||
| Теперь нам нужно научиться выполнять SQL запросы к базе данных SQLite из Python. | Теперь нам нужно научиться выполнять SQL запросы к базе данных SQLite из Python. | ||
| - | Шаг | + | |
| - | В Python есть готовые библиотеки почти на все случаи жизни. Есть библиотека для работы с sqlite3. Эта библиотека содержит функции для подключения к базе данных SQLite, для выполнения SQL запросов к базе данных, | + | ==Шаг |
| - | Для подключения библиотеки SQLite необходимо в начале скрипта написать «import sqlite3». | + | В Python есть готовые библиотеки почти на все случаи жизни. Есть библиотека для работы с **sqlite3**. Эта библиотека содержит функции для подключения к базе данных SQLite, для выполнения SQL запросов к базе данных, |
| + | |||
| + | Для подключения библиотеки SQLite необходимо в начале скрипта написать | ||
| Используем функции библиотеки «connect», | Используем функции библиотеки «connect», | ||
| + | <code python> | ||
| import sqlite3 # | import sqlite3 # | ||
| - | con = sqlite3.connect('/ | + | con = sqlite3.connect('/ |
| cur = con.cursor() # | cur = con.cursor() # | ||
| cur.execute(' | cur.execute(' | ||
| Строка 184: | Строка 253: | ||
| print(users) #вывод массива users на экран | print(users) #вывод массива users на экран | ||
| con.close() # | con.close() # | ||
| + | </ | ||
| + | |||
| Результат выполнения скрипта – массив данных (таблица): | Результат выполнения скрипта – массив данных (таблица): | ||
| - | [(' | + | |
| - | Шаг | + | |
| + | ==Шаг | ||
| Для чтения одной строки массива (таблицы) нужно после названия массива «users» написать номер строки в квадратных скобках. Например «users[0]»: | Для чтения одной строки массива (таблицы) нужно после названия массива «users» написать номер строки в квадратных скобках. Например «users[0]»: | ||
| + | |||
| + | <code python> | ||
| import sqlite3 | import sqlite3 | ||
| - | con = sqlite3.connect('/ | + | con = sqlite3.connect('/ |
| cur = con.cursor() | cur = con.cursor() | ||
| cur.execute(' | cur.execute(' | ||
| Строка 195: | Строка 269: | ||
| print(users[0]) | print(users[0]) | ||
| con.close() | con.close() | ||
| + | </ | ||
| + | |||
| Результат выполнения скрипта – первая (нулевая) строка массива: | Результат выполнения скрипта – первая (нулевая) строка массива: | ||
| - | (' | + | |
| - | Попробуйте написать users[2] для отображения третьей строки. | + | |
| + | < | ||
| Для чтения одной ячейки массива (таблицы) нужно написать координаты ячейки таблицы после названия массива «users» в двух квадратных скобках [x][y], где x - номер строки, | Для чтения одной ячейки массива (таблицы) нужно написать координаты ячейки таблицы после названия массива «users» в двух квадратных скобках [x][y], где x - номер строки, | ||
| Dasha | Dasha | ||
| - | Шаг | + | |
| + | ==Шаг | ||
| Построчное чтение данных в цикле: | Построчное чтение данных в цикле: | ||
| + | <code python> | ||
| import sqlite3 | import sqlite3 | ||
| - | con = sqlite3.connect('/ | + | con = sqlite3.connect('/ |
| cur = con.cursor() | cur = con.cursor() | ||
| cur.execute(' | cur.execute(' | ||
| users = cur.fetchall() | users = cur.fetchall() | ||
| for user in users: | for user in users: | ||
| - | print(user) | + | |
| con.close() | con.close() | ||
| + | </ | ||
| + | |||
| Сохраним этот скрипт. Вернемся к нему после того как считаем данные о регистрациях устройств в WiFi сети роутера. | Сохраним этот скрипт. Вернемся к нему после того как считаем данные о регистрациях устройств в WiFi сети роутера. | ||