мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| zadanie_3 [2024/03/12 09:13] – wikiadmin | zadanie_3 [2024/03/12 09:35] (текущий) – wikiadmin | ||
|---|---|---|---|
| Строка 99: | Строка 99: | ||
| ==Шаг 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 запросов к базе данных, | + | В Python есть готовые библиотеки почти на все случаи жизни. Есть библиотека для работы с **sqlite3**. Эта библиотека содержит функции для подключения к базе данных SQLite, для выполнения SQL запросов к базе данных, |
| - | Для подключения библиотеки SQLite необходимо в начале скрипта написать «import sqlite3». | + | |
| + | Для подключения библиотеки 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(' | ||
| Строка 198: | Строка 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(' | ||
| Строка 210: | Строка 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 сети роутера. | ||