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

Python. SQL. Часть Первая.

Запись от Фаер размещена 08.03.2013 в 19:46
Показов 14662 Комментарии 0

В прошлых записях Мы разобрали достаточно, чтобы собрать нормальный такой сервер. При условии, конечно, что Вы знаете HTML\CSS, ведь вся внешность сайта из них и строится. Однако языки разметки не есть тема данного блога, по крайней мере, пока. Мы сосредоточимся на программировании серверов и примочек для них. Сейчас Мы разберём модуль sqlite3, который позволяет средствами Python'а создавать и обрабатывать реляционные базы данных.

Начнём с определений:
База данных - объект, представляющий собой набор данных, устроенных таким образом, что компьютер может свободно в них ориентироваться.
Реляционный - основанный на понятии "отношение". Математическое определение данного понятия довольно сложно для понимания, поэтому Мы рассмотрим его с точки зрения графической. Представьте себе таблицу(двумерную), каждый столбец которой соответствует определённому подмножеству элементов одного типа. Cтрока представляет из себя набор элементов, каждый из которых принадлежит некоему подмножеству, тому самому, которое задаётся столбцом. Столбцы, при этом, называются "доменами", а строки "кортежами".

Довольно часто реляционные БД называют двумерными массивами, но это не совсем правильно. Массив - это набор однотипных элементов, БД же может включать в себя элементы разных классов.

SQL - компьютерный язык управления базами данных(но не язык программирования в привычном понимании). С помощью пакета sqlite3 Мы можем реализовать функционал SQL через Python. Приготовьтесь, одновременный разбор синтаксиса Системы Управления Базами Данных(СУБД) и API модуля может вызвать некоторые сложности.

Первый скрипт:

Python
1
2
3
4
5
6
7
8
9
10
import sqlite3
 
connection=sqlite3.connect('database')#создаём соединение с базой данных
cursor=connection.cursor()#создаём курсор - основной инструмент работы с БД
 
cursor.execute('create table pupils (name char(30),mark integer(1))')#создаём таблицу
cursor.execute('insert into pupils values (?,?)',('Vasya',5))#заносим в таблицу значения
cursor.execute('insert into pupils values (?,?)',('Petya',2))
connection.commit()#сохраняем изменения
connection.close()
Что тут у Нас имеется:
  1. Создаём объект-соединение, указывая при этом полный путь к файлу-БД. Если такой базы нет, не беда, Python создаст её сам.
  2. Инициируем курсор. Как видно из скрипта, курсор - это исполнитель команд.
  3. Далее, с помощью курсора и его метода execute() Мы создаём таблицу под названием 'pupils', в которой присутствует всего два домена(стобца): 'name' - атрибут длиной в 30 символов, и 'mark' - целое число длиной в один разряд.
  4. Затем Мы добавляем в БД две записи(кортежа) и сохраняем всё это методом commit().
Итак, база данных готова. Теперь давайте вытащим из неё данные:

Python
1
2
3
4
5
6
7
8
9
import sqlite3
connection=sqlite3.connect('database')
cursor=connection.cursor()
 
cursor.execute('select * from pupils')
print(cursor.fetchall())
 
cursor.execute('select name,mark from pupils where mark>3')
print(cursor.fetchall())
Первые три команды Нам уже знакомы. А вот в execute() объявился новый оператор: 'select * from', что можно перевести примерно так: "выбрать все данные из". В Нашем случае извлекаются поля таблицы pupils.

Обратите внимание, Мы используем метод курсора fetchall() для того, чтобы вывести все данные, соответствующие запросу пользователя. Но можно выводить кортежи и по одному, с помощью fetchone(). Ну и до кучи, Вы в праве использовать команду fetchmany(n)(где n - кол-во записей), для того, чтобы извлечь несколько кортежей.

После извлечения всех данных, записанных в таблице, Мы делаем более сложный запрос. Думаю, расписывать каждое его слово не нужно - это всего лишь английский.

Внимание: если Вы выполняете скрипт покомандно в IDLE и получаете ошибку типа 'no such table' и т.п., попробуйте написать скрипт в файл, а уже потом запустить его - мне, например, помогает.

Естественно, можно сделать сразу несколько записей с помощью оператора for:

Python
1
2
3
s=[['Vasya',5],['Petya',3],['Sanya',4]]
for i in s:
    cursor.execute('insert into pupils values (?,?)',i)
Главное, не забывайте сохранять базы данных. Если Вы просто закроете соединение методом .close(), все изменения будут отменены и таблица останется пустой.

Теперь поговорим об очень удобном операторе LIKE. Возьмём БД, созданную первым скриптом, и сделаем такой запрос:
Python
1
cursor.execute("select name,mark from pupils where name like 'P_tya'")
Как видите, здесь Мы используем маску имени атрибута. В частности, знак "_" - означает любой символ(только один). В ответ Python должен выдать Вам кортеж, соответствующий маске:
Python
1
[('Petya', 2)]
В масках также можно использовать символ "%". Он указывает на некоторую последовательность символов. Обратите внимание, маска записывается в кавычках. Чтобы избежать путаницы, используйте разные кавычки, например, двойные для выделения всей команды и апострофы для маски.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru