Давайте в данной статье поговорим о том, как подключать и использовать в Питоне таблицы базы данных. Это пригодится как новичкам, так и опытным разработчикам. Упор будет сделан на базах данных MySQL и SQLite.
MySQL – описание и особенности
MySQL представляет собой систему управления базами данных. Это – организованная в виде таблиц система открытого типа, которая поддерживает универсальные языки программирования SQL.
При помощи нее пользователи смогут выполнять различные операции с БД:
- обнаруживать;
- редактировать;
- удалять.
Это – специализированный инструмент для поиска и внесения корректировок в документы немалого объема.
Работа здесь производится по принципу клиент-сервер. MySQL производит обмен между пользователем и хранилищами данных. Поиск и выдача результата делаются по принципам множества и записи, где первое – это наименования таблицы, второе – строчка в оной.
Это значит, что:
- Все таблицы будут связаны между собой, образовывая круговую (циркулярную) связь.
- Система будет автоматически подбирать подходящую под запрос оператора информацию.
- Данные берутся из уже имеющихся табличных «списков».
Эта СУБД представляет собой гибкую и практичную систему с поддержкой графических интерфейсов. Она часто применяется в разработке контента. Через Python тоже.
Минусы
Обратите внимание на то, что у Питона имеется поддержка самых разных СУБД. MySQL не является единственным доступным вариантом. Эта система обладает не только преимуществами, но и рядом недостатков, о которых должен знать каждый разработчик.
Среди таковых выделяют:
- ограниченные функциональные возможности (пример – отсутствие вложенных запросов);
- стоимость – полная техподдержка предоставляется только платно, а бесплатный вариант сильно ограничен «по умолчанию»;
- затраты на ПО – для того, чтобы работать с СУБД, придется иметь мощный сервер и компьютер;
- преобразования – MySQL быстро блокирует таблицы, из-за чего в больших «перечнях» приходится использовать конвертацию;
- последствия при выходе из строя – восстановить данные при критических сбоях и неполадках программного кода в этой СУБД довольно тяжело.
Зато MySQL предусматривает высокий уровень безопасности и отсутствие противоречивости информации. Обработка электронных материалов здесь ведется совместно. Есть службы резервного копирования, развитые на достойном уровне.
SQLite – что это
SQLite – быстрая и легко встраиваемая однофайловая система управления базами данных. Написана на языке C. Не имеет серверов, что позволяет хранить БД в пределах одного устройства локально. Сторонние библиотеки и службы для того, чтобы пользоваться оной, не пригодятся.
СУБД не будет применять при своем функционировании парадигму клиент-серверной модели. SQLite – это не самостоятельный движок, а своеобразная библиотека для обработки данных и их массивов. Компонуется совместно с написанным приложением. В виде протокола обмена данными задействованы вызовы функций (API) библиотеки SQLite.
SQLite3 – определение
SQLite3 – консольное программное обеспечение для работы с SQLite. Запуск и работа производятся в командной строке, консоли ОС. Совместима с Windows, MacOS и Linux.
Предусматривает такие особенности:
- представление в виде клиента для клиент-серверных утилит;
- позволяет вводить и передавать разные запросы к базе данных;
- обращение происходит не к отдельному процессу-серверу, а ко всему встроенному в софт движку SQLite.
В QSLite3 можно вписать SQL-код. Тогда ПО будет отправлять запросы к ядру, после чего получит и сможет вывести на экран результат.
Преимущества и недостатки
Использование той или иной СУБД должно быть обоснованным. Поэтому о каждом варианте требуется знать максимально точную информацию. У SQL есть плюсы и минусы, способные как облегчить написание ПО на Python, так и сделать процесс труднее.
Сильные стороны
К плюсам этой СУБД относят:
- быстродействие;
- хранение информации в одном документе;
- минимализм;
- надежную систему защиты;
- нулевые конфигурации;
- небольшой размер;
- высокий уровень доступности – находится в свободном доступе;
- кроссплатформенность;
- автономное функционирование.
Это – отличный вариант для начала знакомства с БД и их внедрением в программное обеспечение.
Слабые стороны
Минусы у этой СУБД такие:
- ограничения в поддержке типов данных;
- хранимых процедур нет;
- ограниченность в применении;
- бесплатной поддержки нет.
Профессиональная поддержка от разработчиков обойдется в сумму от 1 500 долларов США в год. Бесплатно пользоваться SQL придется при помощи туториалов и разнообразной документации.
Питон и БД
Python может работать с самыми разными СУБД. Часто для разработки применяется MySQL, а также SQLite. Второй вариант поддерживается системой по умолчанию, поэтому пользоваться им проще. Упор лучше сделать на MySQL, но он не совместим с 3 версией ЯП. Вместо популярного модуля MySQLdb нужно применить PyMySQL.
Это – интерфейс, гарантирующий соединение с базой данных MySQL из Питона. Реализует APIБД Python 2.0. Включает в себя чистую клиентскую библиотеку СУБД. Ключевая цель PyMySQL – это быстрая замена MySQLdb.
Инициализация
Перед началом работы нужно убедиться в том, что рассматриваемая библиотека установлена на задействованном устройстве. В случае отсутствия таковой – провести ее инициализацию.
В скрипте Питона нужно набрать код и обработать его:
#!/usr/bin/python3
import pymysql
Далее все зависит от ситуации. Существуют разные варианты. Иногда необходимый компонент уже есть на устройстве. Тогда пользователь увидит соответствующее сообщение. Если модуль MySQL отсутствует, на экране появится такая запись:
Traceback (most recent call last):
File "test.py", line 3, in <module>
Import pymysql
ImportError: No module named pymysql
Для того, чтобы инициализировать библиотеку, потребуется выполнить команду:
pip install pymysql
Если Pip не доступен, можно осуществить загрузку с GitHub и провести инициализацию с Setuptools. Вот примеры команд:
Для успешного выполнения команды предстоит выполнять все перечисленные операции через права суперпользователя.
Подключение к БД
Использоваться сведения из БД смогут только после непосредственного подключения «таблицы с информацией» к приложению Питона. Перед тем, как устанавливать соединение, требуется убедиться в то, что:
- была создана подходящая база данных – Test DB;
- есть таблица Employee в оной;
- присутствуют поля first_name, last_name, age, income, sex;
- для доступа к БД установлено имя testuser, а также пароль test123;
- на устройстве есть PyMySQL.
Далее будут рассмотрены примеры работ, базирующиеся на БД Test. Чтобы грамотно управлять информацией в приложении, предстоит предварительно разобраться с основами MySQL.
Вот пример соединения:
Он при запуске выдаст надпись с версией БД. Если соединение с источником провелось успешно, объект коннектинга вернется и будет сохранен в БД. Его можно задействовать позже. В противном случае для базы данных устанавливается значение НЕТ. Объект db применяется для создания объекта курсора (cursor). Последний позволяет выполнять запросы SQL. Перед выходом cursor будет гарантировать закрытость соединения с «хранилищем», а также освобождение ресурсов устройства.
Create Table отвечает за создание таблички.
Вставка
Следующая важная операция – это вставка. Операция insert позволяет создавать собственные записи и дополнения.
А вот так будет выглядеть динамическое создание SQL-запросов:
#!/usr/bin/python3
import pymysql
# Open database connection
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
А вот еще один наглядный пример того, как выполняется передача параметров напрямую:
Чтение
Здесь нужно учесть следующее:
- Чтение отвечает за получение полезной информации из «таблицы».
- Может применяться сразу после соединения с базой данных.
- Допустимо использование любых доступных методов: fetchone() или fetchall().
Стоит обратить внимание на несколько ключевых моментов:
- Fetchone – извлекает следующую строку из набора результатов заданного запроса. Результирующий набор – объект, который возвращает система после того, как cursor был применен для запроса table.
- Fetchall – извлекает все строки в результирующем наборе. Если какие-то строчки уже были «прочитаны», система «заберет» то, что осталось.
- Rowcount – атрибут, который предназначается для чтения. Возвращает количество строк, на которые ранее действовал метод execute.
При помощи метода close завершается работа с db.
Выше – пример того, как происходит запрос с заработной платой работников выше 1 000 единиц.
Обновление
При использовании Python в работе с MySQL, нужно знать много разнообразных операций и операторов. Есть обновление. Оно отвечает за ввод новых данных в одну или несколько записей.
Вот пример того, как происходит замена пола с буквой «М». Кодификация будет увеличивать на год возраст:
Удаление
Если оператор DELETE будет передан системе, он сотрет записи из хранилища информации. Ниже – пример команды, которая в Python при помощи MySQLCommands убирает все записи работников, возраст которых составляет более 20 лет.
Транзакции
Когда стало понятно, что такое cursor, за что отвечает print, а также как выполнять основные действия с табличками, можно взяться за транзакции. Они представлены механизмами, которые отвечают за согласованной данных. Предусматривают несколько свойств:
- Атомарность. Любая транзакция или завершена, или ничего не происходит.
- Согласованность. Операция должна начинаться в заранее согласованном состоянии. Результат – тоже в таком же «положении».
- Изоляция. Промежуточные результаты не будут видны за пределами операции.
- Долговечность. После того, как транзакция завершится, последствия сохраняются. Принцип распространяется даже при системных сбоях и неполадках.
У API Питона 2.0 есть два метода для фиксации и отката транзакций.
Commit – это фиксация. Операция, которая передает «зеленый сигнал» базе для завершения изменений. После нее никакие корректировки не допускаются. Они просто фиксируются.
Rollback – отвечает за полную отмену внесенных корректировок. Для отключения «хранилища» используйте метод close. При его активации все незавершенные транзакции будут откатываться.
Ошибки и их обработка
При использовании cursor и других возможностей, могут возникать разного рода ошибки. Примеры: синтаксис в операторе, сбой соединения, вызов метода выборки для завершенного дескриптора.
Через API можно определить количество ошибок. Они будут существовать в пределах каждого модуля «таблички». Ниже указаны исключения.
Вся перечисленная информация о cursor, а также СУБД пригодится при коддинге на Python. Особенно тогда, когда планируется написание клиент-серверной утилиты.
Основы работы с SQLite3
Для начала работы с SQLite3 в Питоне нужно провести импорт соответствующего модуля, а затем создать объект коннектинга к базе. Сделать это можно так:
Cursor в SQLite3
Cursor – это элемент, без которого невозможно продолжить работу. Представляет собой метод соединения. Сначала устанавливается коннектинг, после чего происходит создание cursor с применением объекта соединения.
Выше – наглядный пример контактирования с cursor.
Создание
После того, как с cursor стало все ясно, третьей важной операцией выступает создание «табличного хранилища»:
Здесь будет происходить следующее:
- Импортируется модуль SQLite3.
- Осуществляется определение функции с именем sql_connection.
- Внутри оной будет установлен блок try, в котором метод connect() вернет объект соединения после коннектинга.
- Определяется блок исключений. При наличии оных осуществляется вывод на печать сообщения об ошибке.
- Когда неполадки отсутствуют, соединение устанавливается. Скрипт сообщит об успешном подключении к памяти.
Теперь соединение блока finally будет закрыто. Это не обязательный шаг. Он просто помогает освобождать память устройства.
Здесь можно увидеть, как на SQLite происходит создание базы в Питоне.
Как быстрее понять тему
Примеры Python с MySQL уже были рассмотрены. К моменту написания собственного кода программер должен изучить оператор select и другие действия в пределах табличек, а также разбираться в принципах функционирования cursor.
Чтобы быстрее вникнуть в тему, существуют три способа получения информации:
- Обучение в ВУЗе. На информационных направлениях часто изучают рассмотренную тему.
- Самообразование. Не самый лучший вариант для тех, кто хочет получить документальное подтверждение знаний. Зато он помогает начинать с нуля и учиться, когда удобно.
- Посещение онлайн курсов. Самый верный и надежный прием. Позволяет получить практику и новые полезные знакомства. В конце программы будет выдан электронный сертификат установленного образца.
Все эти методы помогут лучше разобраться в if, where, for row in и других моментах программирования.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>MySQL, SQLite и Python: основы функционирования и применения OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Давайте в данной статье поговорим о том, как подключать и использовать в Питоне таблицы базы данных. Это пригодится как новичкам, так и опытным разработчикам. Упор будет сделан на базах данных MySQL и SQLite. MySQL – описание и особенности MySQL представляет собой систему управления базами данных. Это – организованная в виде таблиц система открытого типа, которая" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#article","name":"MySQL, SQLite \u0438 Python: \u043e\u0441\u043d\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f OTUS","headline":"MySQL, SQLite \u0438 Python: \u043e\u0441\u043d\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/05\/1-1.jpg","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#articleImage","width":450,"height":82},"datePublished":"2022-05-04T19:02:29+00:00","dateModified":"2022-05-04T19:23:32+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#listItem","position":2,"name":"MySQL, SQLite \u0438 Python: \u043e\u0441\u043d\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#webpage","url":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/","name":"MySQL, SQLite \u0438 Python: \u043e\u0441\u043d\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f OTUS","description":"\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u041f\u0438\u0442\u043e\u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c, \u0442\u0430\u043a \u0438 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c. \u0423\u043f\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 MySQL \u0438 SQLite. MySQL \u2013 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 MySQL \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u2013 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"datePublished":"2022-05-04T19:02:29+00:00","dateModified":"2022-05-04T19:23:32+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/3445" /><link rel='shortlink' href='https://otus.ru/journal/?p=3445' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-3445 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-3445" class="the-post post-3445 post type-post status-publish format-standard category-polza">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
MySQL, SQLite и Python: основы функционирования и применения
</h1>
<a href="https://otus.ru/journal/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya/" class="date-link" data-wpel-link="internal"><time class="post-date">4 мая, 2022</time></a>
</div>
<div class="featured">
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#MySQL_%E2%80%93_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="MySQL – описание и особенности">MySQL – описание и особенности</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B" title="Минусы">Минусы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#SQLite_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE" title="SQLite – что это">SQLite – что это</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#SQLite3_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="SQLite3 – определение">SQLite3 – определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" title="Преимущества и недостатки">Преимущества и недостатки</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B" title="Сильные стороны">Сильные стороны</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%A1%D0%BB%D0%B0%D0%B1%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B" title="Слабые стороны">Слабые стороны</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9F%D0%B8%D1%82%D0%BE%D0%BD_%D0%B8_%D0%91%D0%94" title="Питон и БД">Питон и БД</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Инициализация">Инициализация</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_%D0%91%D0%94" title="Подключение к БД">Подключение к БД</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0" title="Вставка">Вставка</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%A7%D1%82%D0%B5%D0%BD%D0%B8%D0%B5" title="Чтение">Чтение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Обновление">Обновление</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Удаление">Удаление</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="#_%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B8" title=" Транзакции"> Транзакции</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%B8%D1%85_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" title="Ошибки и их обработка">Ошибки и их обработка</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_SQLite3" title="Основы работы с SQLite3">Основы работы с SQLite3</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#Cursor_%D0%B2_SQLite3" title="Cursor в SQLite3">Cursor в SQLite3</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5" title="Создание">Создание</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-20" href="#%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D1%82%D0%B5%D0%BC%D1%83" title="Как быстрее понять тему">Как быстрее понять тему</a></li></ul></nav></div>
<p>Давайте в данной статье поговорим о том, как подключать и использовать в Питоне таблицы базы данных. Это пригодится как новичкам, так и опытным разработчикам. Упор будет сделан на базах данных MySQL и SQLite.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="MySQL_%E2%80%93_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>MySQL – описание и особенности<span class="ez-toc-section-end"></span></h2>
<p>MySQL представляет собой систему управления базами данных. Это – организованная в виде таблиц система открытого типа, которая поддерживает универсальные языки программирования SQL.</p>
<p>При помощи нее пользователи смогут выполнять различные операции с БД:</p>
<ul><li>обнаруживать;</li><li>редактировать;</li><li>удалять.</li></ul>
<p>Это – специализированный инструмент для поиска и внесения корректировок в документы немалого объема.</p>
<p>Работа здесь производится по принципу клиент-сервер. MySQL производит обмен между пользователем и хранилищами данных. Поиск и выдача результата делаются по принципам множества и записи, где первое – это наименования таблицы, второе – строчка в оной.</p>
<p>Это значит, что:</p>
<ol type="1"><li>Все таблицы будут связаны между собой, образовывая круговую (циркулярную) связь.</li><li>Система будет автоматически подбирать подходящую под запрос оператора информацию.</li><li>Данные берутся из уже имеющихся табличных «списков».</li></ol>
<p>Эта СУБД представляет собой гибкую и практичную систему с поддержкой графических интерфейсов. Она часто применяется в разработке контента. Через Python тоже.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B"></span>Минусы<span class="ez-toc-section-end"></span></h3>
<p>Обратите внимание на то, что у Питона имеется поддержка самых разных СУБД. MySQL не является единственным доступным вариантом. Эта система обладает не только преимуществами, но и рядом недостатков, о которых должен знать каждый разработчик.</p>
<p>Среди таковых выделяют:</p>
<ul><li>ограниченные функциональные возможности (пример – отсутствие вложенных запросов);</li><li>стоимость – полная техподдержка предоставляется только платно, а бесплатный вариант сильно ограничен «по умолчанию»;</li><li>затраты на ПО – для того, чтобы работать с СУБД, придется иметь мощный сервер и компьютер;</li><li>преобразования – MySQL быстро блокирует таблицы, из-за чего в больших «перечнях» приходится использовать конвертацию;</li><li>последствия при выходе из строя – восстановить данные при критических сбоях и неполадках программного кода в этой СУБД довольно тяжело.</li></ul>
<p>Зато MySQL предусматривает высокий уровень безопасности и отсутствие противоречивости информации. Обработка электронных материалов здесь ведется совместно. Есть службы резервного копирования, развитые на достойном уровне.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="SQLite_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE"></span>SQLite – что это<span class="ez-toc-section-end"></span></h2>
<p>SQLite – быстрая и легко встраиваемая однофайловая система управления базами данных. Написана на языке C. Не имеет серверов, что позволяет хранить БД в пределах одного устройства локально. Сторонние библиотеки и службы для того, чтобы пользоваться оной, не пригодятся.</p>
<p>СУБД не будет применять при своем функционировании парадигму клиент-серверной модели. SQLite – это не самостоятельный движок, а своеобразная библиотека для обработки данных и их массивов. Компонуется совместно с написанным приложением. В виде протокола обмена данными задействованы вызовы функций (API) библиотеки SQLite.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="SQLite3_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>SQLite3 – определение<span class="ez-toc-section-end"></span></h3>
<p>SQLite3 – консольное программное обеспечение для работы с SQLite. Запуск и работа производятся в командной строке, консоли ОС. Совместима с Windows, MacOS и Linux.</p>
<p>Предусматривает такие особенности:</p>
<ul><li>представление в виде клиента для клиент-серверных утилит;</li><li>позволяет вводить и передавать разные запросы к базе данных;</li><li>обращение происходит не к отдельному процессу-серверу, а ко всему встроенному в софт движку SQLite.</li></ul>
<p> В QSLite3 можно вписать SQL-код. Тогда ПО будет отправлять запросы к ядру, после чего получит и сможет вывести на экран результат.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8"></span>Преимущества и недостатки<span class="ez-toc-section-end"></span></h3>
<p>Использование той или иной СУБД должно быть обоснованным. Поэтому о каждом варианте требуется знать максимально точную информацию. У SQL есть плюсы и минусы, способные как облегчить написание ПО на Python, так и сделать процесс труднее.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B"></span>Сильные стороны<span class="ez-toc-section-end"></span></h4>
<p>К плюсам этой СУБД относят:</p>
<ul><li>быстродействие;</li><li>хранение информации в одном документе;</li><li>минимализм;</li><li>надежную систему защиты;</li><li>нулевые конфигурации;</li><li>небольшой размер;</li><li>высокий уровень доступности – находится в свободном доступе;</li><li>кроссплатформенность;</li><li>автономное функционирование.</li></ul>
<p>Это – отличный вариант для начала знакомства с БД и их внедрением в программное обеспечение.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BB%D0%B0%D0%B1%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B"></span>Слабые стороны<span class="ez-toc-section-end"></span></h4>
<p>Минусы у этой СУБД такие:</p>
<ul><li>ограничения в поддержке типов данных;</li><li>хранимых процедур нет;</li><li>ограниченность в применении;</li><li>бесплатной поддержки нет.</li></ul>
<p>Профессиональная поддержка от разработчиков обойдется в сумму от 1 500 долларов США в год. Бесплатно пользоваться SQL придется при помощи туториалов и разнообразной документации.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%B8%D1%82%D0%BE%D0%BD_%D0%B8_%D0%91%D0%94"></span>Питон и БД<span class="ez-toc-section-end"></span></h2>
<p>Python может работать с самыми разными СУБД. Часто для разработки применяется MySQL, а также SQLite. Второй вариант поддерживается системой по умолчанию, поэтому пользоваться им проще. Упор лучше сделать на MySQL, но он не совместим с 3 версией ЯП. Вместо популярного модуля MySQLdb нужно применить PyMySQL.</p>
<p>Это – интерфейс, гарантирующий соединение с базой данных MySQL из Питона. Реализует APIБД Python 2.0. Включает в себя чистую клиентскую библиотеку СУБД. Ключевая цель PyMySQL – это быстрая замена MySQLdb.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Инициализация<span class="ez-toc-section-end"></span></h2>
<p>Перед началом работы нужно убедиться в том, что рассматриваемая библиотека установлена на задействованном устройстве. В случае отсутствия таковой – провести ее инициализацию.</p>
<p>В скрипте Питона нужно набрать код и обработать его:</p>
<pre class="wp-block-code"><code>#!/usr/bin/python3
import pymysql</code></pre>
<p>Далее все зависит от ситуации. Существуют разные варианты. Иногда необходимый компонент уже есть на устройстве. Тогда пользователь увидит соответствующее сообщение. Если модуль MySQL отсутствует, на экране появится такая запись:</p>
<pre class="wp-block-code"><code>Traceback (most recent call last):
File "test.py", line 3, in <module>
Import pymysql
ImportError: No module named pymysql</code></pre>
<p>Для того, чтобы инициализировать библиотеку, потребуется выполнить команду:</p>
<pre class="wp-block-preformatted">pip install pymysql</pre>
<p>Если Pip не доступен, можно осуществить загрузку с GitHub и провести инициализацию с Setuptools. Вот примеры команд:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="450" height="82" src="https://otus.ru/journal/wp-content/uploads/2022/05/1-1.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3447" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/1-1.jpg 450w, https://otus.ru/journal/wp-content/uploads/2022/05/1-1-300x55.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/1-1-150x27.jpg 150w" sizes="(max-width: 450px) 100vw, 450px" /></figure>
<p>Для успешного выполнения команды предстоит выполнять все перечисленные операции через права суперпользователя.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_%D0%91%D0%94"></span>Подключение к БД<span class="ez-toc-section-end"></span></h2>
<p>Использоваться сведения из БД смогут только после непосредственного подключения «таблицы с информацией» к приложению Питона. Перед тем, как устанавливать соединение, требуется убедиться в то, что:</p>
<ul><li>была создана подходящая база данных – Test DB;</li><li>есть таблица Employee в оной;</li><li>присутствуют поля first_name, last_name, age, income, sex;</li><li>для доступа к БД установлено имя testuser, а также пароль test123;</li><li>на устройстве есть PyMySQL.</li></ul>
<p>Далее будут рассмотрены примеры работ, базирующиеся на БД Test. Чтобы грамотно управлять информацией в приложении, предстоит предварительно разобраться с основами MySQL.</p>
<p>Вот пример соединения:</p>
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="398" height="284" src="https://otus.ru/journal/wp-content/uploads/2022/05/2-1.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3448" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/2-1.jpg 398w, https://otus.ru/journal/wp-content/uploads/2022/05/2-1-300x214.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/2-1-150x107.jpg 150w" sizes="(max-width: 398px) 100vw, 398px" /></figure>
<p>Он при запуске выдаст надпись с версией БД. Если соединение с источником провелось успешно, объект коннектинга вернется и будет сохранен в БД. Его можно задействовать позже. В противном случае для базы данных устанавливается значение НЕТ. Объект db применяется для создания объекта курсора (cursor). Последний позволяет выполнять запросы SQL. Перед выходом cursor будет гарантировать закрытость соединения с «хранилищем», а также освобождение ресурсов устройства.</p>
<p>Create Table отвечает за создание таблички.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0"></span>Вставка<span class="ez-toc-section-end"></span></h2>
<p>Следующая важная операция – это вставка. Операция insert позволяет создавать собственные записи и дополнения.</p>
<figure class="wp-block-image size-large"><img decoding="async" width="429" height="367" src="https://otus.ru/journal/wp-content/uploads/2022/05/3.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3449" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/3.jpg 429w, https://otus.ru/journal/wp-content/uploads/2022/05/3-300x257.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/3-150x128.jpg 150w" sizes="(max-width: 429px) 100vw, 429px" /></figure>
<p>А вот так будет выглядеть динамическое создание SQL-запросов:</p>
<pre class="wp-block-code"><code>#!/usr/bin/python3
import pymysql
# Open database connection
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()</code></pre>
<p>А вот еще один наглядный пример того, как выполняется передача параметров напрямую:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="363" height="105" src="https://otus.ru/journal/wp-content/uploads/2022/05/4.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3450" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/4.jpg 363w, https://otus.ru/journal/wp-content/uploads/2022/05/4-300x87.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/4-150x43.jpg 150w" sizes="(max-width: 363px) 100vw, 363px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%B5%D0%BD%D0%B8%D0%B5"></span>Чтение<span class="ez-toc-section-end"></span></h2>
<p>Здесь нужно учесть следующее:</p>
<ol type="1"><li>Чтение отвечает за получение полезной информации из «таблицы».</li><li>Может применяться сразу после соединения с базой данных.</li><li>Допустимо использование любых доступных методов: fetchone() или fetchall().</li></ol>
<p>Стоит обратить внимание на несколько ключевых моментов:</p>
<ol type="1"><li>Fetchone – извлекает следующую строку из набора результатов заданного запроса. Результирующий набор – объект, который возвращает система после того, как cursor был применен для запроса table.</li><li>Fetchall – извлекает все строки в результирующем наборе. Если какие-то строчки уже были «прочитаны», система «заберет» то, что осталось.</li><li>Rowcount – атрибут, который предназначается для чтения. Возвращает количество строк, на которые ранее действовал метод execute.</li></ol>
<p>При помощи метода close завершается работа с db.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="434" height="408" src="https://otus.ru/journal/wp-content/uploads/2022/05/5.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3451" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/5.jpg 434w, https://otus.ru/journal/wp-content/uploads/2022/05/5-300x282.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/5-150x141.jpg 150w" sizes="(max-width: 434px) 100vw, 434px" /></figure>
<p>Выше – пример того, как происходит запрос с заработной платой работников выше 1 000 единиц.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Обновление<span class="ez-toc-section-end"></span></h2>
<p>При использовании Python в работе с MySQL, нужно знать много разнообразных операций и операторов. Есть обновление. Оно отвечает за ввод новых данных в одну или несколько записей.</p>
<p>Вот пример того, как происходит замена пола с буквой «М». Кодификация будет увеличивать на год возраст:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="433" height="341" src="https://otus.ru/journal/wp-content/uploads/2022/05/6.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3452" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/6.jpg 433w, https://otus.ru/journal/wp-content/uploads/2022/05/6-300x236.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/6-150x118.jpg 150w" sizes="(max-width: 433px) 100vw, 433px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Удаление<span class="ez-toc-section-end"></span></h2>
<p>Если оператор DELETE будет передан системе, он сотрет записи из хранилища информации. Ниже – пример команды, которая в Python при помощи MySQLCommands убирает все записи работников, возраст которых составляет более 20 лет.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="412" height="331" src="https://otus.ru/journal/wp-content/uploads/2022/05/7.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3453" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/7.jpg 412w, https://otus.ru/journal/wp-content/uploads/2022/05/7-300x241.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/7-150x121.jpg 150w" sizes="(max-width: 412px) 100vw, 412px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="_%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B8"></span> Транзакции<span class="ez-toc-section-end"></span></h2>
<p>Когда стало понятно, что такое cursor, за что отвечает print, а также как выполнять основные действия с табличками, можно взяться за транзакции. Они представлены механизмами, которые отвечают за согласованной данных. Предусматривают несколько свойств:</p>
<ol type="1"><li>Атомарность. Любая транзакция или завершена, или ничего не происходит.</li><li>Согласованность. Операция должна начинаться в заранее согласованном состоянии. Результат – тоже в таком же «положении».</li><li>Изоляция. Промежуточные результаты не будут видны за пределами операции.</li><li>Долговечность. После того, как транзакция завершится, последствия сохраняются. Принцип распространяется даже при системных сбоях и неполадках.</li></ol>
<p>У API Питона 2.0 есть два метода для фиксации и отката транзакций.</p>
<p>Commit – это фиксация. Операция, которая передает «зеленый сигнал» базе для завершения изменений. После нее никакие корректировки не допускаются. Они просто фиксируются.</p>
<p>Rollback – отвечает за полную отмену внесенных корректировок. Для отключения «хранилища» используйте метод close. При его активации все незавершенные транзакции будут откатываться.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%B8%D1%85_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0"></span>Ошибки и их обработка<span class="ez-toc-section-end"></span></h2>
<p>При использовании cursor и других возможностей, могут возникать разного рода ошибки. Примеры: синтаксис в операторе, сбой соединения, вызов метода выборки для завершенного дескриптора.</p>
<p>Через API можно определить количество ошибок. Они будут существовать в пределах каждого модуля «таблички». Ниже указаны исключения.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="457" height="508" src="https://otus.ru/journal/wp-content/uploads/2022/05/8.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3454" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/8.jpg 457w, https://otus.ru/journal/wp-content/uploads/2022/05/8-270x300.jpg 270w, https://otus.ru/journal/wp-content/uploads/2022/05/8-135x150.jpg 135w" sizes="(max-width: 457px) 100vw, 457px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="459" height="360" src="https://otus.ru/journal/wp-content/uploads/2022/05/9.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3455" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/9.jpg 459w, https://otus.ru/journal/wp-content/uploads/2022/05/9-300x235.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/9-150x118.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/9-87x67.jpg 87w" sizes="(max-width: 459px) 100vw, 459px" /></figure>
<p>Вся перечисленная информация о cursor, а также СУБД пригодится при коддинге на Python. Особенно тогда, когда планируется написание клиент-серверной утилиты.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_SQLite3"></span>Основы работы с SQLite3<span class="ez-toc-section-end"></span></h2>
<p>Для начала работы с SQLite3 в Питоне нужно провести импорт соответствующего модуля, а затем создать объект коннектинга к базе. Сделать это можно так:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="370" height="93" src="https://otus.ru/journal/wp-content/uploads/2022/05/10.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3456" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/10.jpg 370w, https://otus.ru/journal/wp-content/uploads/2022/05/10-300x75.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/10-150x38.jpg 150w" sizes="(max-width: 370px) 100vw, 370px" /></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cursor_%D0%B2_SQLite3"></span>Cursor в SQLite3<span class="ez-toc-section-end"></span></h3>
<p>Cursor – это элемент, без которого невозможно продолжить работу. Представляет собой метод соединения. Сначала устанавливается коннектинг, после чего происходит создание cursor с применением объекта соединения.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="369" height="85" src="https://otus.ru/journal/wp-content/uploads/2022/05/11.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3457" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/11.jpg 369w, https://otus.ru/journal/wp-content/uploads/2022/05/11-300x69.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/11-150x35.jpg 150w" sizes="(max-width: 369px) 100vw, 369px" /></figure>
<p>Выше – наглядный пример контактирования с cursor.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5"></span>Создание<span class="ez-toc-section-end"></span></h3>
<p>После того, как с cursor стало все ясно, третьей важной операцией выступает создание «табличного хранилища»:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="667" height="460" src="https://otus.ru/journal/wp-content/uploads/2022/05/12.jpg" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3458" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/12.jpg 667w, https://otus.ru/journal/wp-content/uploads/2022/05/12-300x207.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/12-150x103.jpg 150w" sizes="(max-width: 667px) 100vw, 667px" /></figure>
<p>Здесь будет происходить следующее:</p>
<ol type="1"><li>Импортируется модуль SQLite3.</li><li>Осуществляется определение функции с именем sql_connection.</li><li>Внутри оной будет установлен блок try, в котором метод connect() вернет объект соединения после коннектинга.</li><li>Определяется блок исключений. При наличии оных осуществляется вывод на печать сообщения об ошибке.</li><li>Когда неполадки отсутствуют, соединение устанавливается. Скрипт сообщит об успешном подключении к памяти.</li></ol>
<p>Теперь соединение блока finally будет закрыто. Это не обязательный шаг. Он просто помогает освобождать память устройства.</p>
<p><a href="https://www.youtube.com/watch?v=h6112tjkMUM" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно увидеть, как на SQLite происходит создание базы в Питоне.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D1%82%D0%B5%D0%BC%D1%83"></span>Как быстрее понять тему<span class="ez-toc-section-end"></span></h2>
<p>Примеры Python с MySQL уже были рассмотрены. К моменту написания собственного кода программер должен изучить оператор select и другие действия в пределах табличек, а также разбираться в принципах функционирования cursor.</p>
<p>Чтобы быстрее вникнуть в тему, существуют три способа получения информации:</p>
<ol type="1"><li>Обучение в ВУЗе. На информационных направлениях часто изучают рассмотренную тему.</li><li>Самообразование. Не самый лучший вариант для тех, кто хочет получить документальное подтверждение знаний. Зато он помогает начинать с нуля и учиться, когда удобно.</li><li>Посещение онлайн курсов. Самый верный и надежный прием. Позволяет получить практику и новые полезные знакомства. В конце программы будет выдан электронный сертификат установленного образца.</li></ol>
<p>Все эти методы помогут лучше разобраться в if, where, for row in и других моментах программирования.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/subd/?utm_source=blog&utm_medium=affilate&utm_campaign=subd" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/05/SUBD_970x90-20219-543a9a.png" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3459" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/SUBD_970x90-20219-543a9a.png 970w, https://otus.ru/journal/wp-content/uploads/2022/05/SUBD_970x90-20219-543a9a-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/SUBD_970x90-20219-543a9a-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/SUBD_970x90-20219-543a9a-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/python-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=python" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/05/Python_970x90-20219-8b1a8e.png" alt="MySQL, SQLite и Python: основы функционирования и применения" class="wp-image-3460" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/Python_970x90-20219-8b1a8e.png 970w, https://otus.ru/journal/wp-content/uploads/2022/05/Python_970x90-20219-8b1a8e-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/Python_970x90-20219-8b1a8e-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/Python_970x90-20219-8b1a8e-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F&text=MySQL%2C%20SQLite%20%D0%B8%20Python%3A%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B8%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya%2F&media=&description=MySQL%2C%20SQLite%20%D0%B8%20Python%3A%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B8%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/arhitektura-rest-i-api/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/arhitektura-rest-i-api/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Архитектура REST и API" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Архитектура REST и API" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/arhitektura-rest-i-api/" data-wpel-link="internal">Архитектура REST и API</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/arhitektura-rest-i-api/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-04T18:33:29+00:00">4 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">8 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/agile-chto-eto-i-pri-chem-tut-kanban-i-scrum/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/agile-chto-eto-i-pri-chem-tut-kanban-i-scrum/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Agile: что это, и при чем тут Канбан и Scrum" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-2-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Agile: что это, и при чем тут Канбан и Scrum" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/agile-chto-eto-i-pri-chem-tut-kanban-i-scrum/" data-wpel-link="internal">Agile: что это, и при чем тут Канбан и Scrum</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/agile-chto-eto-i-pri-chem-tut-kanban-i-scrum/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-04T19:35:36+00:00">4 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">8 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/mysql-sqlite-i-python-osnovy-funkcionirovaniya-i-primeneniya\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Mon, 09 Mar 2026 15:47:15 GMT -->