Python School
82.9K subscribers
2.38K photos
7 videos
558 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Получаем количество строк, затронутых SQL-запросом

После выполнения SQL-запроса может потребоваться узнать, сколько строк было затронуто — например, при UPDATE или DELETE. Многие новички не знают, что Python позволяет легко получить это значение.

Используйте атрибут cursor.rowcount, чтобы сразу узнать, сколько строк было изменено или удалено.

🎯 Итог
cursor.rowcount позволяет получить количество строк, затронутых последним SQL-запросом — удобно для логирования, проверки и отладки.
Безопасные SQL-запросы с параметрами

Новички часто вставляют значения прямо в SQL-строку, что может привести к SQL-инъекциям и ошибкам. В Python с библиотекой sqlite3 (и другими DB API) правильнее использовать параметры запроса.

Вместо конкатенации строк, используйте ? — это защитит вас от уязвимостей и избавит от лишнего форматирования.

🎯 Итог
Используйте параметризованные запросы (? и кортеж) вместо подстановки значений вручную — это безопаснее и чище.
Оптимизируем множественные вставки в БД

Когда нужно вставить много строк в базу данных, делать INSERT в цикле — медленно и неэффективно. Используйте executemany() — он вставляет все строки одним запросом, что значительно ускоряет выполнение.

🎯 Итог
Используйте executemany() для пакетной вставки данных — это быстрее и уменьшает нагрузку на базу.
Получаем количество строк без загрузки всех данных

Чтобы узнать, сколько строк вернёт запрос, не обязательно загружать все данные в память. Вместо SELECT * используйте SELECT COUNT(*) — это быстрее и экономит ресурсы.

🎯 Итог
Используйте COUNT(*) для быстрой оценки количества записей — это эффективнее, чем вытягивать все строки и считать их вручную.
Безопасные SQL-запросы через параметризованные запросы

Новички часто подставляют значения в SQL-запрос через f-строки или конкатенацию, что может привести к SQL-инъекциям. Вместо этого используйте параметризованные запросы — это безопасно и правильно.

🎯 Итог
Всегда используйте параметризованные запросы для защиты от SQL-инъекций. Это безопаснее и чище, чем вручную подставлять значения в строки.
Быстрое создание таблицы, если её нет

При первом запуске скрипта бывает нужно создать таблицу, если она ещё не существует. Вместо проверки вручную можно использовать встроенную конструкцию SQL — CREATE TABLE IF NOT EXISTS.

🎯 Итог
CREATE TABLE IF NOT EXISTS позволяет избежать ошибок при повторном создании таблицы и упрощает инициализацию базы данных.
Используем параметризованные запросы для защиты от SQL-инъекций

Новички часто подставляют значения в SQL-запросы через f-строки или конкатенацию, что может привести к уязвимостям. Вместо этого лучше использовать параметризованные запросы, которые автоматически экранируют значения и защищают от SQL-инъекций.

🎯 Итог
Параметризованные запросы не только безопаснее, но и делают код чище. Никогда не вставляй переменные напрямую в SQL — используй placeholder'ы (? или %s), и передавай значения отдельно.
Получаем все строки как словари

При работе с SQLite результат запроса по умолчанию возвращается в виде кортежей. Это не очень удобно, особенно если нужно обращаться к значениям по названиям колонок. Можно включить специальный режим, чтобы строки возвращались как словари.

🎯 Итог
Используй row_factory = dict_factory, чтобы получать строки из БД как словари. Это упростит доступ к данным и сделает код более читаемым.
Бывший маркетолог СберМаркета Юра Сапожников создал канал про E-commerce, российский онлайн-бизнес, маркетплейсы и digital – «Из коммерса в е-коммерса».

Если продаёте или покупаете в интернете, подписывайтесь, там цифры, новости, аналитика и шутейки иногда))

Юра сам из Е-кома и дружит со многими крупными компаниями, не редко публикуя анонсы раньше официальных пресс-релизов. Так что подписывайтесь: @hikollegi
Безопасные SQL-запросы с параметрами

Многие новички склонны вставлять значения напрямую в SQL-запросы с помощью f-строк, что может привести к SQL-инъекциям. Вместо этого лучше использовать параметризованные запросы — это безопаснее и чище.

🎯 Итог
Избегай f-строк в SQL-запросах — всегда используй параметризованные запросы, чтобы защититься от SQL-инъекций и писать более надёжный код.
Автоматическое закрытие соединения с БД

Часто новички забывают закрыть соединение с базой данных, что может привести к утечкам ресурсов. Вместо ручного закрытия лучше использовать контекстный менеджер with, который автоматически закрывает соединение.

🎯 Итог
Используй with при работе с базами данных — это не только чище, но и безопаснее: соединение закроется автоматически даже при ошибках.
Хотите научиться программировать, но теряетесь в выборе языка? Или уже изучаете Python, но не хватает практики? Тогда этот бесплатный мини-курс от Skillbox по Python-разработке — то, что нужно!

👉🏻 Если коротко: это мини-курс из 4 записанных уроков и 1 прямого эфира. Смотрите, когда удобно, после каждого выполняете задания. В итоге у вас будет 4 проекта для портфолио: Telegram-бот, который умеет превращать голос в текст, парсер для сбора данных и веб-страница на Flask. Неплохая практика для 5 занятий!


🎁 Ещё участников мини-курса ждут подарки: персональная карьерная консультация, скидка 10 000 рублей на любой курс Skillbox и подборка полезных материалов для старта карьеры в Python-разработке.

Переходите по ссылке и регистрируйтесь: https://epic.st/QeEKo?erid=2VtzqvjsSMq

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Возврат нескольких значений из функции

Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать.
Массовая вставка данных без цикла

Вставлять много записей по одной — неэффективно. Лучше использовать метод executemany, который сразу выполнит множество вставок за один запрос.

🎯 Итог
executemany позволяет вставлять или обновлять множество записей за один запрос, экономя время и ресурсы.
🧵 Упрощаем цепочки if с помощью match-case

Иногда при проверке значения переменной мы пишем длинную цепочку if-elif-else. Это выглядит громоздко и сложно читается.

С Python 3.10 можно использовать конструкцию match-case, которая делает код компактнее и читабельнее — особенно при работе со строками, числом или даже структурами данных.

🎯 Итог
match-case — это элегантная альтернатива if-elif-else в Python 3.10+. Подходит для ветвлений по значениям, в том числе с распаковкой. Пиши чище, читай легче!
⏱️ Как быстро измерить время выполнения кода

Иногда нужно понять, сколько времени занимает выполнение куска кода. В боевых условиях используют logging и профилировщики, но для быстрой отладки есть простой лайфхак с time.perf_counter().

🎯 Итог
time.perf_counter() — точный и удобный способ измерить время выполнения кода. Используй для быстрой диагностики производительности прямо в процессе разработки.
🔁 Как один раз инициализировать ресурс при первом использовании

Допустим, у тебя есть тяжёлая операция (например, подключение к БД, загрузка модели и т.д.), которую нужно выполнить только один раз при первом вызове. Для этого идеально подходит functools.lru_cache.

🎯 Итог
@lru_cache — простой способ ленивой инициализации: функция выполнится один раз, а результат будет использоваться повторно. Идеально для кэширования настроек, соединений и других «разовых» данных.
⛓️ Как объединять цепочки условий красиво и читаемо

Иногда логика с множеством if становится громоздкой. В таких случаях удобно использовать словарь как аналог switch-case.

🎯 Итог
Словарь заменяет кучу if-elif-else, делает код чище и облегчает добавление новых случаев. Особенно полезно, когда условия связаны с конкретными значениями (например, кодами, командами или ролями).
⏱️ Как замерить время выполнения кода элегантно

Иногда нужно узнать, сколько времени занял блок кода — для отладки, оптимизации или просто интереса. Вместо громоздких решений можно использовать контекстный менеджер.

🎯 Итог
Контекстный менеджер timeit позволяет быстро замерять производительность без лишнего шума. Особенно полезен при профилировании отдельных участков кода.
🧩 Как элегантно объединять словари с приоритетом значений

Часто нужно объединить два словаря, где значения из второго имеют приоритет. Это можно сделать просто и читаемо.

🎯 Итог
Синтаксис {**dict1, **dict2} объединяет словари, давая приоритет второму. Удобен для настройки конфигураций, параметров и всего, что связано с override'ами.