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

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

Запись от Фаер размещена 09.03.2013 в 12:57
Показов 6202 Комментарии 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
Комментарии
 
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru