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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
zadanie_3 [2024/03/12 09:21] wikiadminzadanie_3 [2024/03/12 09:35] (текущий) wikiadmin
Строка 125: Строка 125:
 ==Шаг 7. Отображение данных таблицы SELECT== ==Шаг 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>
  
 ==Шаг 8. Условия выборки 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>
  
 ==Шаг 9. Создание и заполнение второй таблицы== ==Шаг 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>
  
 ==Шаг 10. Связь двух таблиц== ==Шаг 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 роутера.
Строка 200: Строка 240:
  
 ==Шаг 11. 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') #выполнение запроса
Строка 210: Строка 253:
 print(users) #вывод массива users на экран print(users) #вывод массива users на экран
 con.close() #закрытие соединения к базе данных con.close() #закрытие соединения к базе данных
 +</code>
 +
 Результат выполнения скрипта – массив данных (таблица): Результат выполнения скрипта – массив данных (таблица):
-[('Ivan', 25), ('Dasha', 23), ('Juliya', 21)]+  [('Ivan', 25), ('Dasha', 23), ('Juliya', 21)]
  
 ==Шаг 12. Выборочное чтение данных== ==Шаг 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')
Строка 222: Строка 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
Строка 230: Строка 281:
 ==Шаг 13. Чтение данных в цикле== ==Шаг 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 сети роутера.