Форум программистов, компьютерный форум, киберфорум
Фаер
Войти
Регистрация
Восстановить пароль

Python. SQL. Часть Вторая.

Запись от Фаер размещена 09.03.2013 в 12:57
Показов 6328 Комментарии 0

В этой раз Мы будем больше говорить о синтаксисе SQL, нежели о Python. А что поделаешь, разбирать-то базы данных надо.
Прошлую запись Мы закончили разбором оператора LIKE. Как Вы, наверное, догадались, его можно использовать в связке с логическими операторами OR, AND и NOT.

Для начала давайте сделаем такую БД:

Python
1
2
3
4
5
6
7
8
9
10
11
import sqlite3
connection=sqlite3.connect('database')
cursor=connection.cursor()
cursor.execute('create table pupils (name char(20),mark integer(3),town char(20))')
 
sp=[['Vasya',87,'Moscow'],['Petya',92,'Sochi'],['Sanya',85,'Anapa']]
for i in sp:
    cursor.execute('insert into pupils values (?,?,?)',i)
 
connection.commit()
connection.close()
А теперь запустим скрипт, извлекающий из полученной БД информацию:

Python
1
2
3
4
5
6
import sqlite3
conn=sqlite3.connect('database')
cur=conn.cursor()
 
cur.execute("select * from pupils where name like 'V%a' or mark>90")
print(cur.fetchall())
В этом скрипте Мы использовали запрос с оператором OR(или). Как следствие, в ответ Мы получаем список из двух кортежей:
Python
1
[('Vasya', 87, 'Moscow'), ('Petya', 92, 'Sochi')]
Первый соответствует маске 'V%a', второй, в свою очередь, удовлетворяет условию mark>90. Ну, я думаю, лишних пояснений и разбора остальных логических операторов не требуется: если Вы знакомы с программированием(а оно так и есть, иначе Вы бы не читали этот блог), то поймёте всё без лишних слов.

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

Python
1
2
3
4
5
6
7
8
9
import sqlite3
conn=sqlite3.connect('database')
cur=conn.cursor()
 
cur.execute("select * from pupils where name in ('Vasya','Sanya')")
print(cur.fetchall())
 
cur.execute("select name,mark from pupils where mark between 86 and 95")
print(cur.fetchall())
Оператор IN - проверяет, входит ли указанный атрибут в список.
А BETWEEN определяет, попадает ли выбранный элемент в отрезок [x1 and x2](пограничные элементы, равные х1 и х2, тоже удовлетворяют условию BETWEEN). Кстати, подобные условия можно использовать и для символьных величин:
Python
1
...where x between 'A' and 'F'
Идём далее. Выборку данных можно сортировать оператором ORDER BY. Например,
Python
1
cur.execute("select * from pupils order by mark")
Полученый список будет упорядочен по возрастанию значений атрибута mark. Если же Вы хотите упорядочить результаты по убыванию, то Вам поможет оператор DESC, который ставится в конце запроса:
Python
1
cur.execute("select * from pupils order by mark desc")
Ну и в заключение, рассмотрим агрегатные функции. Эти самые функции производят обобщение выбранных данных, выдавая при этом одно единственное значение. Вот их список:
  • max - определяет максимум
  • min - определяет минимум
  • count - считает кол-во записей
  • sum - рассчитывает сумму
  • avg - рассчитывает среднее значение
Давайте, например, отыщем ученика с наибольшим кол-вом баллов, а так же выведем средний результат:

Python
1
2
3
4
5
cur.execute("select name from pupils where mark=(select max(mark) from pupils)")
print(cur.fetchall())
 
cur.execute("select avg(mark) from pupils")
print(cur.fetchall())
Как видите, использование АФ значительно усложняет запросы. Дело-то всё в том, что агрегатные функции нельзя вот так взять и вставить в любое место. Их нужно обрамлять select'ом и from'ом, иначе Python выдаст Вам ошибку и дело с концом.

Заметьте, функции max(), min() и ORDER BY применимы и для символьных величин. Критерием отбора будет порядок символов в алфавите.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru