Готові до тренування? 🤩
Домашнє завдання складається з двох незалежних завдань і може видатися досить великим за обсягом, але немає потреби хвилюватися, оскільки ми детально розписали підказки та рекомендації щодо виконання.
Отже, сьогодні ви:
- Створите базу даних для системи управління завданнями, використовуючи PostgreSQL, та виконаєте необхідні запити в базі даних системи управління завданнями.
- Розробите Python скрипт, який використовує бібліотеку PyMongo для реалізації основних операцій у MongoDB.
Це завдання допоможе вам закріпити знання щодо роботи з SQL та розуміння різних аспектів взаємодії з реляційною базою даних, включаючи вибірку, оновлення, вставку та аналіз даних. Також, виконуючи це домашнє завдання, ви навчитеся використовувати методи PyMongo для взаємодії з хмарним сервером MongoDB зі скрипту Python.
-
Створіть публічний репозиторій
goit-cs-hw-03
. -
Виконайте завдання та відправте його у свій репозиторій.
Note
Для завдання 1 повинні бути 3 файли: скрипт .py створення таблиць, скрипт .py наповнення таблиць даними та скрипт .py чи .sql з SQL запитами.
-
Завантажте робочі файли на свій комп’ютер та прикріпіть їх у LMS у форматі
zip
. Назва архіву повинна бути у форматі ДЗ3_ПІБ. -
Прикріпіть посилання на репозиторій
goit-cs-hw-03
та відправте на перевірку.
- Оцінка від 0 до 100
- Завдання 1 оцінюється в 60 балів, завдання 2 — в 40 балів
Caution
👉🏻 Якщо є помилки або недоліки виконання, кількість балів за кожне завдання зменшується пропорційно до наявних помилок на розсуд ментора.
Warning
💡 Відправляйте ДЗ на перевірку, коли зроблено все можливе, оскільки кількість спроб здачі завдання впливає на отриманий бал! За кожну наступну спробу після другої (тобто з третьої) максимальна можлива кількість балів зменшується на 5.
Таким чином: 1 спроба: максимальна кількість балів – 100,
2 спроба: максимальна кількість балів – 100,
3 спроба: максимальна кількість балів – 95,
4 спроба: максимальна кількість балів – 90,
5 спроба: максимальна кількість балів – 85, тощо
Критерії оцінювання робіт у магістратурі GoIt Neoversity
Important
☝🏻 УВАГА!! У вас є можливість обрати підхід до виконання та можливого доопрацювання домашнього завдання:
- задовольнитися першою отриманою оцінкою (звісно ж, якщо вона вище прохідного бала),
- намагатися отримати вищий бал шляхом можливого послідуючого доопрацювання роботи у відповідності з фідбеком ментора.
Обраний підхід до виконання ДЗ необхідно зазначити у полі для здачі до прикріпленого завдання. За відсутності коментаря ментор дотримується першого підходу й виставляє отриману оцінку.
- Прикріплені файли репозиторію у форматі
zip
з назвою ДЗ3_ПІБ. - Посилання на репозиторій.
Tip
💡 ВАЖЛИВО Перегляньте Інструкцію щодо завантаження робочого файлу з репозиторію на Github
Створіть базу даних для системи управління завданнями, використовуючи PostgreSQL. База даних має містити таблиці для користувачів, статусів завдань і самих завдань. Виконайте необхідні запити в базі даних системи управління завданнями.
- Створіть таблиці у вашій PostgreSQL базі даних відповідно до вимог. Використовуйте належні типи даних та обмеження.
Таблиця users
:
id
: Первинний ключ, автоінкремент (типSERIAL
),fullname
: Повне ім'я користувача (типVARCHAR(100)
),email
: Електронна адреса користувача, яка повинна бути унікальною (типVARCHAR(100)
).
Таблиця status
:
id
: Первинний ключ, автоінкремент (типSERIAL
),name
: Назва статусу (типVARCHAR(50)
), повинна бути унікальною. Пропонуємо наступні типи[('new',), ('in progress',), ('completed',)]
.
Таблиця tasks
:
id
: Первинний ключ, автоінкремент (типSERIAL
),title
: Назва завдання (типVARCHAR(100)
),description
: Опис завдання (типTEXT
),status_id
: Зовнішній ключ, що вказує наid
у таблиціstatus
(типINTEGER
),user_id
: Зовнішній ключ, що вказує наid
у таблиці users (типINTEGER
).
-
Переконайтеся, що поля
email
у таблиціusers
таname
у таблиціstatus
є унікальними. -
Налаштуйте зв'язки між таблицями таким чином, щоб при видаленні користувача автоматично видалялися всі його завдання (каскадне видалення).
-
Напишіть скрипт створення цих таблиць.
-
Напишіть скрипт
seed.py
на Python, який буде заповнювати ці таблиці випадковими значеннями. Використовуйте бібліотеку Faker. -
Використовуючи SQL, виконайте наступні запити в базі даних системи управління завданнями.
- Отримати всі завдання певного користувача. Використайте
SELECT
для отримання завдань конкретного користувача за йогоuser_id
. - Вибрати завдання за певним статусом. Використайте підзапит для вибору завдань з конкретним статусом, наприклад,
'new'
. - Оновити статус конкретного завдання. Змініть статус конкретного завдання на
'in progress'
або інший статус. - Отримати список користувачів, які не мають жодного завдання. Використайте комбінацію
SELECT
,WHERE NOT IN
і підзапит. - Додати нове завдання для конкретного користувача. Використайте
INSERT
для додавання нового завдання. - Отримати всі завдання, які ще не завершено. Виберіть завдання, чий статус не є 'завершено'.
- Видалити конкретне завдання. Використайте
DELETE
для видалення завдання за йогоid
. - Знайти користувачів з певною електронною поштою. Використайте
SELECT
із умовоюLIKE
для фільтрації за електронною поштою. - Оновити ім'я користувача. Змініть ім'я користувача за допомогою
UPDATE
. - Отримати кількість завдань для кожного статусу. Використайте
SELECT
,COUNT
,GROUP BY
для групування завдань за статусами. - Отримати завдання, які призначені користувачам з певною доменною частиною електронної пошти. Використайте
SELECT
з умовоюLIKE
в поєднанні зJOIN
, щоб вибрати завдання, призначені користувачам, чия електронна пошта містить певний домен (наприклад,'%@example.com'
). - Отримати список завдань, що не мають опису. Виберіть завдання, у яких відсутній опис.
- Вибрати користувачів та їхні завдання, які є у статусі 'in progress'. Використайте
INNER JOIN
для отримання списку користувачів та їхніх завдань із певним статусом. - Отримати користувачів та кількість їхніх завдань. Використайте
LEFT JOIN
таGROUP BY
для вибору користувачів та підрахунку їхніх завдань.
Note
💡 Рекомендації до виконання:
Використовуйте ваші SQL-навички для формулювання й виконання кожного з цих запитів у вашій базі даних.
Переконайтеся, що ви розумієте, як кожен запит працює, та які результати ви очікуєте отримати.
Для кращого розуміння спробуйте модифікувати запити або створити свої власні, ґрунтуючись на структурі бази даних.
-
Створено таблиці та виконано вимоги до структури бази даних.
-
Поля
email
у таблиціusers
таname
у таблиціstatus
є унікальними. -
При видаленні користувача автоматично видаляються всі його завдання (каскадне видалення).
-
Написано скрипт створення таблиць.
-
Написано скрипт
seed.py
на Python, який буде заповнювати ці таблиці випадковими значеннями, з використанням бібліотеки Faker. -
Виконано всі необхідні запити в базі даних системи управління завданнями.
Tip
Критерії прийняття домашнього завдання є обов’язковою умовою оцінювання домашнього завдання ментором. Якщо якийсь з критеріїв не виконано, ДЗ відправляється ментором на доопрацювання без оцінювання. Якщо вам “тільки уточнити”😉 або ви “застопорилися” на якомусь з етапів виконання— звертайтеся до ментора у Slack)
Розробіть Python скрипт, який використовує бібліотеку PyMongo для реалізації основних CRUD (Create, Read, Update, Delete) операцій у MongoDB.
- Створіть базу даних відповідно до вимог.
Кожен документ у вашій базі даних повинен мати наступну структуру:
{
"\_id": ObjectId("60d24b783733b1ae668d4a77"),
"name": "barsik",
"age": 3,
"features": ["ходить в капці", "дає себе гладити", "рудий"]
}
Документ представляє інформацію про кота, його ім'я name
, вік age
та характеристики features
.
- Розробіть Python скрипт
main.py
для виконання наступних завдань.
- Реалізуйте функцію для виведення всіх записів із колекції.
- Реалізуйте функцію, яка дозволяє користувачеві ввести ім'я кота та виводить інформацію про цього кота.
- Створіть функцію, яка дозволяє користувачеві оновити вік кота за ім'ям.
- Створіть функцію, яка дозволяє додати нову характеристику до списку
features
кота за ім'ям.
- Реалізуйте функцію для видалення запису з колекції за ім'ям тварини.
- Реалізуйте функцію для видалення всіх записів із колекції.
Tip
💡 Рекомендації до виконання:
-
Використовуйте MongoDB Atlas або локально встановлений екземпляр MongoDB за допомогою Docker.
-
Встановіть бібліотеку PyMongo через pip або інший пакетний менеджер, як pipenv чи poetry.
-
Не забудьте обробити можливі винятки при виконанні операцій з базою даних.
-
Переконайтеся, що ваші функції чітко коментовані та добре структуровані.
-
Заохочується використання Python віртуального середовища для ізоляції залежностей проєкту.
-
Створено базу даних та виконано вимоги щодо структури документів.
-
Реалізовано всі необхідні операції.
-
Оброблено можливі винятки при виконанні операцій з базою даних.
-
Функції чітко коментовані та добре структуровані.