Zen of Python
20.1K subscribers
1.16K photos
157 videos
32 files
3.09K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Загрузка данных SQL в Pandas без нехватки памяти

Если вы попытаетесь загрузитесь слишком большой объём данных в Pandas из SQL, то велика вероятность, что вашему компьютеру просто не хватит оперативной памяти, чтобы обработать такой запрос.

Этой проблемы можно избежать и в этой статье вы узнаете как:

https://tprg.ru/Rqst

#pandas #sql
Как создать базу данных SQLite на Python

Если вы уже прокачались в Python и хотите двигаться дальше — стоит научиться работать с БД, ведь большинству программ требуется база данных для хранения информации.

В этой статье вы научитесь создавать БД и обрабатывать данные из неё в Python:

https://tprg.ru/6rEw

#sql
8 первоклассных инструкций SQL на каждый день

Несколько полезных SQL-инструкций, которые помогут вам экономить время при работе с данными. Сохраните себе, чтобы не забыть и воспользоваться при случае:

https://nuancesprog.ru/p/15071/

#sql
Руководство по подготовке к собеседованию по SQL

Вопросы по SQL — одна из ключевых тем собеседования на должность аналитика данных. При подготовке к такому собеседованию могут возникнуть трудности с детальной проработкой всех возможных вариантов вопросов по SQL. Эта статья поможет вам подготовиться к собеседованию для его успешного прохождения:

https://nuancesprog.ru/p/15485/

#sql
Миграция базы данных SQLAlchemy для приложений Flask с использованием Alembic

Flask-Migrate — это расширение, которое обрабатывает миграцию базы данных SQLAlchemy для приложений Flask с помощью Alembic. Операции с базой данных предоставляются в виде аргументов командной строки в flask db команде.

Подробную инструкцию по использованию и примеры работы можно посмотреть тут:

https://morioh.com/p/9bcd13dbee9f

#flask #sql #библиотека
Как запустить сервер PostgreSQL прямо в браузере

В данной статье речь пойдёт о новом инструменте, созданном с использованием Python, который называется postgres-wasm. Это запускаемый в браузере сервер PostgreSQL с полным набором функционала, включая сохранение состояния в браузере, восстановление из pg_dump и логическую репликацию из удалённой базы данных.

Подробнее о проекте можно узнать в этой статье:

https://habr.com/ru/company/skillfactory/blog/693332/

#sql #веб
Подсчёт числа записей в БД за выбранный период времени

Частой просьбой от хозяев проекта может стать подсчёт записей по дням. Такой SQL-запрос можно встроить в код Python, который запускается по расписанию и автоматизирует подсчёт по дням.

SELECT
TIMESTAMP_TRUNC(Timestamp, day) Timestamp,
COUNT(1) `Count`
FROM table
GROUP BY 1
ORDER BY Timestamp

TIMESTAMP_TRUNC() обрежет столбец даты и времени до выбранного диапазона, в нашем случае, дня. COUNT(1) создаст служебный столбец Count и выставит все значения столбца, равными единице. Затем мы сгруппируем все ряды по этой единице, тем самым произведя подсчёт числа рядов.

В результате мы получим вот такой полезный вывод данных ниже:

#SQL
SQL: вставка новых записей в БД или обновление существующих

Почти сразу при появлении SQL в работе появляется потребность обновлять базу. Однако вручную выслеживать, кто в большом наборе есть, а кого добавлять, — трата времени.

Запрос ниже добавляет новых сотрудников в перечень персонала. Если запись с таким именем уже существует, то эта инъекция обновит ее:

db = # WITH new_employees AS (
SELECT *
FROM (
VALUES ('George', 'Sales', 'Manager', 1000),
('Jane', 'R&D', 'Developer', 1200)
) AS t(name, department, role, salary)
)
INSERT INTO employees (name, department, role, salary)
SELECT name,
department,
role,
salary
FROM new_employees ON CONFLICT (name) DO
UPDATE
SET department = EXCLUDED.department,
role = EXCLUDED.role,
salary = EXCLUDED.salary
RETURNING *;

#SQL
sqlite3 для работы с БД

В Python существует встроенный модуль для работы с базой на SQLite с поддержкой большинства команд:

import sqlite3

# Подключимся к базе orders
conn = sqlite3.connect('orders')
cur = conn.cursor()

# Отобразим всю таблицу addons
cur.execute('SELECT * FROM addons')
cur.fetchone()

#SQL
SQL-запросы, которые вы рано или поздно погуглите

Разобрали в статье на примерах самые популярные команды, связанные с модификацией таблиц, обновлением записей и условиями и проч.

#SQL
Книга «SQL: быстрое погружение» Уолтера Шилдса

SQL — рабочая лошадка среди языков программирования, основа основ для современного анализа и управления данными. Книга идеальна для новичков, в ней вы найдёте способ мягко познакомиться с вопросом хранения данных и узнаете, почему этот стандарт до сих пор по умолчанию применяется в большинстве веб-приложений.

Профиль книги на Livelib

#SQL
​Порядок выполнения SQL-операций

Исчерпывающий гайд от dev-notes.ru, с помощью которого вы узнаете, почему в объединяющем запросе с фильтрацией порядок будет FROM — JOIN — WHERE — GROUP BY — HAVING — SELECT — ORDER — LIMIT, что такое SARGABLE-запросы и какие функции замедляют исполнение операций.

#sql
Это было вопросом времени: SQL-запросы из естественного языка

На HuggingFace появилась Text-to-SQL-модель ChatDB на 6.91 млрд. параметров, что позволяет превращать обычный текстовый запрос к БД в SQL-выражение:

Вопрос: Покажи день, в который пришло больше всего пользователей

Ответ:

SELECT created_at::DATE AS day, COUNT(*) AS user_count
FROM users
GROUP BY day
ORDER BY user_count DESC
LIMIT 1;


#sql #llm
​​Суперсила для оптимизации SQL-запросов

Канал Listen IT рассказал на примерах о способах оптимизации обращений к базе. Хороший способ познакомиться с индексами и их кластеризацией.

#sql #лучшиепрактики
This media is not supported in your browser
VIEW IN TELEGRAM
Простой мини-чат на FastApi с непростым наполнением

Нечасто попадаются такие мощные проекты с понятным объяснением, как это работает. В этом руководстве вы сможете узнать, как создать готовый рабочий чат, используя FastAPI, вебсокеты, SQLAlchemy и SQLite. В итоге вы узнаете, как работать с этими технологиями, какие возможности открывают и в каких случаях их лучше применять.

#fastapi #sql #туториал
Forwarded from Веб-страница
Онлайн-песочница для обучения и тестирования SQL

SQL Playground — это бесплатный сервис, который позволяет вам изучать SQL и тестировать различные запросы как в MySQL, так и в PostgreSQL. Работает песочница прямо в браузере, при этом поддерживает подсветку синтаксиса и обладает автоматических генератором схем БД.

Пробуем по ссылке: sqlplayground.app

#инструменты #sql #бд
5 игр, чтобы подучить SQL (и не уснуть по дороге)

SQLPD — расследуете преступления как аналитик SQL-полиции. Каждое задание — отдельное дело.

SQL Island — выживаете после крушения на острове, выполняя SQL-задачи, чтобы выбраться.

SQL Murder Mystery — ищете убийцу в базе данных. Свобода действий и минимум подсказок.

Lost at SQL — спасаете подлодку и команду, проходя сюжетные SQL-челленджи.

SQL Squid Game Решаете задачи по мотивам игры в кальмара, чтобы не повторить судьбу коллеги-аналитика.

#игры #sql
Как понять партиционирование: DWH для гуманитариев

На Tproger объяснили различные типы партиционирования — диапазонное, списковое и хешевое с примерами применения. Если вы подступились к действительно объемным базам, или просто столкнулись с постфиксом _* в BigQuery или других подобных продуктах, статья поможет разобраться.

#основы #sql

@zen_of_python
​​Ошибки, которые можно избежать в SQL: грабли начинающего аналитика

Если вы только начинаете работать с SQL, статья поможет избежать типичных ошибок (пропуски, доступы, производительность).

Там вы узнаете, почему важно проверять данные после объединения таблиц и как избежать потери строк при использовании JOIN.

#основы #sql
@zen_of_python
Молчаливый «провал» INSERT

Вы запускаете SQL-запрос INSERT, и вроде всё просто. Нет ошибок. Но и данные не вставлены. Звучит странно? Такое действительно может случиться с PostgreSQL — и случается чаще, чем хотелось бы.


Как можно вставить данные и не вставить одновременно?

Когда INSERT не срабатывает, первое, что приходит в голову — ошибка. Но PostgreSQL умеет «глотать» такое — ведь вы сами его об этом попросили.

Виновник — ON CONFLICT DO NOTHING



INSERT INTO users (id, email)
VALUES (42, 'user@example.com')
ON CONFLICT (id) DO NOTHING;


Здесь мы явно говорим: "если произойдёт конфликт по id, ничего не делай". И PostgreSQL по умолчанию так и поступает.


Поведение UPSERT при множественных уникальных индекса

Представьте, что в таблице есть не один, а два уникальных индекса:


CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE,
username TEXT UNIQUE
);


Теперь вы выполняете:


INSERT INTO users (email, username)
VALUES ('user@example.com', 'johnny');


А если username = 'johnny' уже существует, но email ещё нет?

Вставка завершится ошибкой!

Так происходит, потому что ON CONFLICT (email) говорит PostgreSQL: «молчи, если конфликт по email, но бросай ошибку, если конфликт по чему-то ещё».

Чтобы избежать этого, используем:


ON CONFLICT DO NOTHING


Тогда PostgreSQL проигнорирует конфликт по любому индексу. Но это может спровоцировать проблемы, особенно при вставке пачкой


Как отладить такую ситуацию?

Проверяйте rowcount после запроса. В Python/psycopg2, например:


cursor.execute(sql, values)
if cursor.rowcount == 0:
print("Nothing inserted!")


— Добавьте RETURNING и логируйте:


INSERT INTO users (email, username)
VALUES ('user@example.com', 'johnny')
ON CONFLICT DO NOTHING
RETURNING id;


Если возвращается пустой результат — значит, вставки не было.

— Логируйте причину. Если вы используете логику вида DO UPDATE, можно добавить логи в `UPDATE`-часть или сохранять «причину отказа» отдельно.

#sql