мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
zadanie_3 [2024/03/12 09:13] wikiadminzadanie_3 [2024/03/12 09:35] (текущий) wikiadmin
Строка 99: Строка 99:
 ==Шаг 5. Создание таблицы CREATE TABLE== ==Шаг 5. Создание таблицы CREATE TABLE==
 Команды в SQL называют запросами. Создадим новую таблицу в нашей базе данных, написав запрос на языке SQL. Таблица будет называться «users». Поля таблицы: Команды в SQL называют запросами. Создадим новую таблицу в нашей базе данных, написав запрос на языке SQL. Таблица будет называться «users». Поля таблицы:
-Name с типом String (в этом столбце будет текст) + 
-Age с типом Int (в этом столбце будут целые числа) +**Name** с типом //String// (в этом столбце будет текст) 
-Mac с типом String (в этом поле будем указывать MAC-адрес телефона пользователя) + 
-sqlite> CREATE TABLE users(name String, age Int, mac String);+**Age** с типом //Int// (в этом столбце будут целые числа) 
 + 
 +**Mac** с типом //String// (в этом поле будем указывать MAC-адрес телефона пользователя) 
 + 
 +  sqlite> CREATE TABLE users(name String, age Int, mac String);
  
 Посмотрим, какие теперь есть таблицы в нашей базе данных: Посмотрим, какие теперь есть таблицы в нашей базе данных:
-sqlite> .tables +  sqlite> .tables 
-users+  users
  
 ==Шаг 6. Заполнение данных таблицы INSERT== ==Шаг 6. Заполнение данных таблицы INSERT==
-Добавим в созданную таблицу данные. Для этого используем SQL запрос «INSERT». Указываем, что мы будем добавлять данные в поля name и age таблицы users «INTO users(name,age,mac)». Данные задаём после «VALUES». Каждая строка в круглых скобках через запятую. Внутри круглых скобок значения полей name (строка в кавычках) и age. «('Ivan',25,’mac1’)» – одна строка. «('Dasha',23,’mac2’)» - другая строка. Добавим 3 строки: +Добавим в созданную таблицу данные. Для этого используем SQL запрос «INSERT».  
-sqlite> INSERT INTO users(name, age, mac) VALUES ('Ivan',25, ‘mac1’), ('Dasha',23,’mac2’), ('Juliya',21,’mac3’); + 
-Шаг 7. Отображение данных таблицы SELECT+Указываем, что мы будем добавлять данные в поля name и age таблицы users «INTO users(name,age,mac)».  
 + 
 +Данные задаём после «VALUES». Каждая строка в круглых скобках через запятую.  
 + 
 +Внутри круглых скобок значения полей name (строка в кавычках) и age. «('Ivan',25,’mac1’)» – одна строка. «('Dasha',23,’mac2’)» - другая строка. Добавим 3 строки: 
 + 
 +  sqlite> INSERT INTO users(name, age, mac) VALUES ('Ivan',25, ‘mac1’), ('Dasha',23,’mac2’), ('Juliya',21,’mac3’); 
 + 
 +==Шаг 7. Отображение данных таблицы SELECT==
 Отобразим данные из таблицы users. Это делается SQL запросом «SELECT». После «SELECT» указывается список столбцов, которые нам нужно отобразить. Если написать «*» то отобразятся все столбцы таблицы. После «FROM» пишем название таблицы, из которой нужно отобразить данные: Отобразим данные из таблицы users. Это делается SQL запросом «SELECT». После «SELECT» указывается список столбцов, которые нам нужно отобразить. Если написать «*» то отобразятся все столбцы таблицы. После «FROM» пишем название таблицы, из которой нужно отобразить данные:
 +
 +<code>
 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
 +</code>
  
 Включим отображение заголовков столбцов: Включим отображение заголовков столбцов:
-sqlite> .headers on+  sqlite> .headers on
 Снова отобразим данные из таблицы users. Теперь с заголовками столбцов «name|age|mac»: Снова отобразим данные из таблицы users. Теперь с заголовками столбцов «name|age|mac»:
 +
 +<code>
 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
 +</code>
  
 Для того, чтобы выбрать только один столбец в списке полей вместо «*» нужно написать название столбца: Для того, чтобы выбрать только один столбец в списке полей вместо «*» нужно написать название столбца:
 +
 +<code>
 sqlite> SELECT name FROM users; sqlite> SELECT name FROM users;
 +
 name name
 Ivan Ivan
 Dasha Dasha
 Juliya Juliya
 +</code>
  
 Можно указать несколько столбцов через запятую. Столбцы будут отображаться в указанном в запросе порядке: Можно указать несколько столбцов через запятую. Столбцы будут отображаться в указанном в запросе порядке:
 +
 +<code>
 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>
  
-==Шаг 7. Условия выборки WHERE==+==Шаг 8. Условия выборки WHERE==
 Выберем не все данные, а только данные соответствующие нужным критериям. Для этого в запрос «SELECT» добавим условия «WHERE»: Выберем не все данные, а только данные соответствующие нужным критериям. Для этого в запрос «SELECT» добавим условия «WHERE»:
 +
 +<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
 +</code>
 Получили только 2 записи, т.к. «Ivan» не попал в нашу выборку по возрасту. Получили только 2 записи, т.к. «Ivan» не попал в нашу выборку по возрасту.
 Можно выполнить поиск по конкретному условию: Можно выполнить поиск по конкретному условию:
 +
 +<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
 +</code>
  
-==Шаг 8. Создание и заполнение второй таблицы==+==Шаг 9. Создание и заполнение второй таблицы==
 Создадим вторую таблицу. Это будет таблица MAC-адресов активных регистраций устройств WiFi-роутера с уровнями сигналов: Создадим вторую таблицу. Это будет таблица MAC-адресов активных регистраций устройств WiFi-роутера с уровнями сигналов:
-sqlite> CREATE TABLE registrations (mac String, signal String);+  sqlite> CREATE TABLE registrations (mac String, signal String);
 Посмотрим обновленный список таблиц в нашей базе данных: Посмотрим обновленный список таблиц в нашей базе данных:
 +
 +<code>
 sqlite> .tables sqlite> .tables
 +
 registrations users registrations users
 +</code>
  
 Пока добавим в таблицу registrations данные вручную (в дальнейшем нам нужно будет автоматически записывать данные, полученные с роутера, в эту таблицу): Пока добавим в таблицу registrations данные вручную (в дальнейшем нам нужно будет автоматически записывать данные, полученные с роутера, в эту таблицу):
-sqlite> INSERT INTO registrations (mac, signal) VALUES ('mac3', '-72'), ('mac1','-85'), ('mac5','-69');+ 
 +  sqlite> INSERT INTO registrations (mac, signal) VALUES ('mac3', '-72'), ('mac1','-85'), ('mac5','-69'); 
 Отобразим данные из этой таблицы: Отобразим данные из этой таблицы:
 +
 +<code>
 sqlite> SELECT * FROM registrations; sqlite> SELECT * FROM registrations;
 +
 mac|signal mac|signal
 mac3|-72 mac3|-72
 mac1|-85 mac1|-85
 mac5|-69 mac5|-69
 +</code>
  
-==Шаг 9. Связь двух таблиц==+==Шаг 10. Связь двух таблиц==
 Теперь наша задача – связать 2 таблицы: найти соответствия MAC-адресов в таблице «users» MAC-адресам в таблице «registrations». Для этого в разделе FROM запроса SELECT указываем обе таблицы через запятую «FROM users, registrations», а в разделе FROM указываем условие равенства полей mac в обеих таблицах «WHERE users.mac = registrations.mac». Т.к. таблиц в запросе теперь несколько названия столбцов нужно указывать вместе с названием таблицы («users.mac», «registrations.mac»): Теперь наша задача – связать 2 таблицы: найти соответствия MAC-адресов в таблице «users» MAC-адресам в таблице «registrations». Для этого в разделе FROM запроса SELECT указываем обе таблицы через запятую «FROM users, registrations», а в разделе FROM указываем условие равенства полей mac в обеих таблицах «WHERE users.mac = registrations.mac». Т.к. таблиц в запросе теперь несколько названия столбцов нужно указывать вместе с названием таблицы («users.mac», «registrations.mac»):
 +
 +<code>
 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
 +</code>
  
 Мы получили строки обеих таблиц, в которых поля «mac» равны. Мы получили строки обеих таблиц, в которых поля «mac» равны.
 Можно выбрать не все столбцы, а только определенные. Для это вместо «*» нужно перечислить названия столбцов через запятую (также с указанием таблиц): Можно выбрать не все столбцы, а только определенные. Для это вместо «*» нужно перечислить названия столбцов через запятую (также с указанием таблиц):
 +<code>
 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
 +</code>
  
 Для начала нам этого хватит. Мы вернемся в SQLite когда будем создавать таблицу пользователей WiFi роутера. Для начала нам этого хватит. Мы вернемся в SQLite когда будем создавать таблицу пользователей WiFi роутера.
 Теперь нам нужно научиться выполнять SQL запросы к базе данных SQLite из Python. Теперь нам нужно научиться выполнять SQL запросы к базе данных SQLite из Python.
  
-==Шаг 10. SQL из Python== +==Шаг 11. SQL из Python== 
-В Python есть готовые библиотеки почти на все случаи жизни. Есть библиотека для работы с sqlite3. Эта библиотека содержит функции для подключения к базе данных SQLite, для выполнения SQL запросов к базе данных, получения данных и т.п. +В Python есть готовые библиотеки почти на все случаи жизни. Есть библиотека для работы с **sqlite3**. Эта библиотека содержит функции для подключения к базе данных SQLite, для выполнения SQL запросов к базе данных, получения данных и т.п. 
-Для подключения библиотеки SQLite необходимо в начале скрипта написать «import sqlite3».+ 
 +Для подключения библиотеки SQLite необходимо в начале скрипта написать **«import sqlite3»**. 
 Используем функции библиотеки «connect», «cursor», «execute», «fetchall» и «close»: Используем функции библиотеки «connect», «cursor», «execute», «fetchall» и «close»:
 +<code python>
 import sqlite3 #подключение библиотеки sqlite3 import sqlite3 #подключение библиотеки sqlite3
-con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb) #подключение к базе данных sqlite+con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb') #подключение к базе данных sqlite
 cur = con.cursor() #создание курсора для подключения cur = con.cursor() #создание курсора для подключения
 cur.execute('SELECT * FROM users') #выполнение запроса cur.execute('SELECT * FROM users') #выполнение запроса
Строка 198: Строка 253:
 print(users) #вывод массива users на экран print(users) #вывод массива users на экран
 con.close() #закрытие соединения к базе данных con.close() #закрытие соединения к базе данных
 +</code>
 +
 Результат выполнения скрипта – массив данных (таблица): Результат выполнения скрипта – массив данных (таблица):
-[('Ivan', 25), ('Dasha', 23), ('Juliya', 21)]+  [('Ivan', 25), ('Dasha', 23), ('Juliya', 21)]
  
-==Шаг 11. Выборочное чтение данных==+==Шаг 12. Выборочное чтение данных==
 Для чтения одной строки массива (таблицы) нужно после названия массива «users» написать номер строки в квадратных скобках. Например «users[0]»: Для чтения одной строки массива (таблицы) нужно после названия массива «users» написать номер строки в квадратных скобках. Например «users[0]»:
 +
 +<code python>
 import sqlite3 import sqlite3
-con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb)+con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb')
 cur = con.cursor() cur = con.cursor()
 cur.execute('SELECT * FROM users') cur.execute('SELECT * FROM users')
Строка 210: Строка 269:
 print(users[0]) print(users[0])
 con.close() con.close()
 +</code>
 +
 Результат выполнения скрипта – первая (нулевая) строка массива: Результат выполнения скрипта – первая (нулевая) строка массива:
-('Ivan', 25)  +  ('Ivan', 25)  
-Попробуйте написать users[2] для отображения третьей строки.+ 
 +<bootnote>Попробуйте написать users[2] для отображения третьей строки.</bootnote> 
 Для чтения одной ячейки массива (таблицы) нужно написать координаты ячейки таблицы после названия массива «users» в двух квадратных скобках [x][y], где x - номер строки, y - номер столбца. Например «users[1][0]» отобразит первый столбец второй строки: Для чтения одной ячейки массива (таблицы) нужно написать координаты ячейки таблицы после названия массива «users» в двух квадратных скобках [x][y], где x - номер строки, y - номер столбца. Например «users[1][0]» отобразит первый столбец второй строки:
 Dasha Dasha
  
-==Шаг 12. Чтение данных в цикле==+==Шаг 13. Чтение данных в цикле==
 Построчное чтение данных в цикле: Построчное чтение данных в цикле:
 +<code python>
 import sqlite3 import sqlite3
-con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb)+con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb')
 cur = con.cursor() cur = con.cursor()
 cur.execute('SELECT * FROM users') cur.execute('SELECT * FROM users')
 users = cur.fetchall() users = cur.fetchall()
 for user in users: for user in users:
- print(user)+    print(user)
 con.close() con.close()
 +</code>
 +
 Сохраним этот скрипт. Вернемся к нему после того как считаем данные о регистрациях устройств в WiFi сети роутера. Сохраним этот скрипт. Вернемся к нему после того как считаем данные о регистрациях устройств в WiFi сети роутера.