MiddlePython Developer > Основы Python > SQL-запросы
Короткий ответ RETURNING позволяет получить значения изменённых (или вставленных/удалённых) строк в одном запросе вместе с самой операцией изменения, без отдельного round-trip на SELECT, и без риска, что между UPDATE и последующим SELECT другая транзакция успеет снова изменить эти же строки. Как это работает подробнее RETURNING добавляется к INSERT/UPDATE/DELETE и возвращает результирующий набор строк так же, как обычный SELECT, но строки берутся непосредственно из только что изменённых версий — одна атомарная операция клиент-сервер. Пример кода Что использовать на практике Практика. Удобно применять, когда нужно сразу получить вычисленное на стороне БД значение (например, обновлённый balance после F("balance") - amount) или id после INSERT, без дополнительного запроса; это также устраняет гонку между UPDATE и следующим SELECT. Подводные камни Ошибка. Продолжают писать UPDATE, а затем отдельный SELECT для получения результата по тому же условию — лишний round-trip и потенциальная рассинхронизация, если между
postgresqlquerying
MiddlePython Developer > Основы Python > ООП и модель объектов
Короткий ответ ABC формализует контракт: класс с абстрактным методом нельзя инстанцировать напрямую, пока все абстрактные методы не переопределены в подклассе, что даёт явную, проверяемую на этапе создания объекта гарантию реализации интерфейса, а не только соглашение по документации, на которое полагается чистая утиная типизация. Как это работает подробнее Класс, наследующийся от abc.ABC и помечающий методы @abstractmethod, не может быть создан через ClassName(), если хотя бы один абстрактный метод не переопределён в конкретном подклассе — Python поднимает TypeError прямо в момент попытки создания объекта, а не позже, когда отсутствующий метод впервые понадобится. Это сдвигает обнаружение ошибки "забыли реализовать метод" на самое раннее возможное время. Пример кода Что использовать на практике Практика. ABC полезны, когда в команде/библиотеке определён набор обязательных методов для расширяемого компонента (например, разные реализации хранилища данных, разные стратегии оплаты), и важно сразу получить понятн
abcduck-typing
JuniorPython Developer > Основы Python > Проектирование API
Короткий ответ Версия в URL позволяет вносить несовместимые изменения в API, продолжая обслуживать старых клиентов на прежней версии, пока они не перейдут на новую — это один из простых способов версионирования контракта. Как это работает подробнее при изменении формата ответа, удалении поля или смене поведения эндпоинта несовместимым образом создаётся новая версия (/v2/...), а старая версия продолжает работать без изменений для существующих интеграций. Пример кода Что использовать на практике Рекомендация. версионирование в URL — не единственный способ (есть версия через заголовок или content negotiation), но он самый явный и простой для отладки (видно прямо в адресе, легко тестировать curl'ом). Важно заранее договориться о политике поддержки старых версий (сколько версий поддерживается одновременно, срок депрекации). Подводные камни Риски. менять поведение существующего эндпоинта без увеличения версии, молча ломая всех текущих клиентов; увеличивать версию при любом, даже совместимом изменении (например
api-versioningbackward-compatibility
JuniorDevOps Engineer > Контейнеры и доставка > CI/CD и управление релизами
Короткий ответ CHANGELOG.md — это человекочитаемый список изменений по версиям (новые функции, исправления багов, breaking changes), который помогает пользователям и команде понять, что изменилось в каждом релизе, не читая весь список коммитов. Как это работает подробнее при каждом релизе в changelog добавляется новая секция с номером версии и датой, сгруппированная по категориям (Added, Changed, Fixed, Removed — по соглашению Keep a Changelog). Записи пишутся на уровне пользователя/API, а не как сырые сообщения коммитов. Пример кода Что использовать на практике На практике. changelog особенно важен для библиотек и API с внешними потребителями — по нему решают, безопасно ли обновляться. Многие команды автоматизируют его генерацию на основе соглашений о сообщениях коммитов (Conventional Commits) и семантического релиз-тулинга (semantic-release и аналоги), чтобы не забывать обновлять файл вручную. Пример. Ожидаемое поведение: пользователь, обновляющий зависимость до `1.5.0`, может быстро понять из changelog, чт
changelogcicd-and-release-management
JuniorPerformance Marketer > Google Ads > Данные, комплаенс и безопасность рекламных аккаунтов
Короткий ответ Двухфакторная аутентификация требует второй фактор, например код из приложения, при входе. Она защищает рекламный аккаунт от доступа по одному лишь украденному или подобранному паролю. Как это работает подробнее Если пароль перехвачен через фишинг или утёк из другого сервиса, без второго фактора злоумышленнику сложнее войти и менять кампании либо платёжные данные. Защищайте учётную запись входа. Включите 2FA на личном аккаунте, которым сотрудник входит в рекламную платформу. Что использовать на практике Организуйте восстановление. Убедитесь, что второй фактор и резервные способы восстановления контролируются уполномоченным сотрудником и не зависят только от недоступного корпоративного номера. Подводные камни Учитывайте офбординг. Если код приходит на номер, который компания или сотрудник больше не контролирует, включённая 2FA может привести к потере доступа.
2faaccess-control
JuniorPython Developer > Основы Python > Тестирование кода
Короткий ответ Отдельная тестовая конфигурация нужна, чтобы тесты всегда запускались с предсказуемыми, безопасными значениями (адрес тестовой БД, отключённая отправка реальных писем, тестовые ключи внешних сервисов) и не зависели от того, что случайно настроено на машине разработчика или в production. Как это работает подробнее Приложение обычно читает настройки из переменных окружения или конфигурационного файла; для тестового прогона эти значения переопределяются отдельным файлом (например, .env.test) или фикстурой pytest, которая выставляет переменные окружения перед тестами и возвращает их к исходным значениям после завершения прогона. Пример кода Что использовать на практике Практика. Важно, чтобы тестовая конфигурация явно указывала на тестовую БД, тестовый (или замоканный) внешний сервис и безопасные заглушки для секретов — ни один тестовый прогон не должен иметь технической возможности случайно отправить реальное письмо или списать реальные деньги через production-ключ, даже при ошибке в коде теста. П
configurationenvironment-variables
JuniorPython Developer > Основы Python > Тестирование кода
Короткий ответ Отдельная тестовая БД нужна, чтобы тесты не изменяли и не зависели от данных production или окружения разработки; её обычно поднимают через фикстуру, которая создаёт схему перед тестами и удаляет данные после них. Как это работает подробнее Тестовая БД может быть отдельной базой в том же СУБД-инстансе, временным SQLite-файлом или контейнером, поднятым специально для тестового прогона (например, через testcontainers или docker-compose), и полностью независима от БД разработки. Фикстура уровня сессии обычно применяет миграции один раз в начале прогона, а фикстура уровня функции очищает или откатывает данные между тестами. Пример кода Что использовать на практике Практика. Важно, чтобы тестовая БД максимально соответствовала production по диалекту СУБД — если в проде PostgreSQL, тесты на SQLite могут не заметить несовместимые особенности SQL (например, работу с JSON-полями, регистрозависимость строк или ограничениями внешних ключей), которые проявятся только в production. Подводные камни Риск. Исп
databasespython
JuniorPerformance Marketer > Google Ads > Инструменты и автоматизация
Короткий ответ Python с pandas полезен, когда отчёты нужно регулярно собирать из нескольких источников, обрабатывать большие объёмы и повторять одну и ту же логику без ручных шагов. Таблицы удобнее для быстрой проверки, ручного анализа и небольших выгрузок. Как это работает подробнее pandas загружает файлы и табличные ответы API в DataFrame, после чего фильтрация, объединение и группировка выполняются воспроизводимым кодом. Скрипт можно запускать по расписанию и логировать; таблица остаётся удобным слоем просмотра или ручной проверки результата. Порог перехода. Учитывайте не только число строк, но и частоту обновлений, источники, сложность правил и цену ошибки. Воспроизводимость. Храните код и определение метрик в контролируемой версии, а входы и результат проверяйте автоматически. Пример кода Что использовать на практике Оставьте Sheets для удобства. Используйте таблицу как интерфейс проверки, если автоматизация кода пока не оправдывает стоимость поддержки. Автоматизируйте повторяемое. Начните с стабильного
data-processingpandas
JuniorPerformance Marketer > Google Ads > Инструменты и автоматизация
Короткий ответ Расписание сокращает ручную работу и риск пропусков, ошибок копирования и разных версий отчёта. Чтобы автоматизация была полезной, нужно контролировать успешность обновления, полноту данных, часовой пояс и доставку сообщения получателям. Как это работает подробнее Данные может обновлять коннектор, скрипт или планировщик, после чего BI-сервис или почтовая интеграция доставляет отчёт в заданное время. Надёжная схема разделяет загрузку, проверки и публикацию: если обновление не завершилось или контроль качества не пройден, старые данные не должны выдаваться за свежие. Управление расписанием. Планируйте запуск после ожидаемого поступления данных и учитывайте длительность обновления. Наблюдаемость. Сохраняйте время последнего успешного запуска и уведомляйте владельца о сбое. Пример кода Что использовать на практике Владение. Назначьте владельца отчёта и получателей оповещений, чтобы ошибка не оставалась незамеченной. Безопасная доставка. Убедитесь, что рассылка не раскрывает коммерческие данные лишн
email-deliverygoogle-sheets
MiddlePerformance Marketer > Google Ads > Специфика рекламных площадок и каналов
Короткий ответ CAPI передаёт данные о конверсиях напрямую с сервера бизнеса в Meta, минуя браузер пользователя, что делает трекинг устойчивым к блокировщикам, ограничениям cookie и последствиям ATT на iOS, где пиксель теряет значительную часть событий; CAPI не заменяет пиксель полностью, а дополняет его. Как это работает подробнее пиксель фиксирует события в браузере и зависит от того, разрешит ли браузер/устройство выполнение JS-кода и передачу cookie (на что влияют блокировщики, ITP в Safari и отказ от трекинга через ATT на iOS 14.5+), тогда как CAPI отправляет те же события из системы бизнеса напрямую через серверный API, используя хэшированные идентификаторы пользователя для сопоставления с профилем в Meta. Что использовать на практике На практике. Meta рекомендует дедупликацию событий между пикселем и CAPI (по общему event_id), чтобы не задвоить одну и ту же конверсию; корректно настроенный CAPI повышает совпадение событий (event match quality) и объём данных для алгоритма оптимизации, что критично после
conversions-apiios-tracking