Last active
May 20, 2026 14:42
-
-
Save sunmeat/b9f3beb78cb80b720c2c1806bab7fa77 to your computer and use it in GitHub Desktop.
Django Shell
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| .\env\Scripts\activate | |
| pip install mssql-django | |
| ======================================================================================================== | |
| settings.py: | |
| ... | |
| DATABASES = { | |
| 'default': { | |
| 'ENGINE': 'mssql', | |
| 'NAME': 'test', | |
| 'HOST': 'localhost', | |
| 'OPTIONS': { | |
| 'driver': 'ODBC Driver 18 for SQL Server', | |
| 'trusted_connection': 'yes', | |
| 'extra_params': 'TrustServerCertificate=yes;', | |
| }, | |
| }} | |
| ... | |
| ======================================================================================================== | |
| models.py: | |
| from django.db import models | |
| class Author(models.Model): | |
| name = models.CharField(max_length=255) | |
| birth_year = models.IntegerField() | |
| rating = models.FloatField() | |
| def __str__(self): | |
| return self.name | |
| class Book(models.Model): | |
| title = models.CharField(max_length=255) | |
| author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books') | |
| pages = models.IntegerField() | |
| price = models.DecimalField(max_digits=8, decimal_places=2) | |
| published_year = models.IntegerField() | |
| stock = models.IntegerField() | |
| def __str__(self): | |
| return self.title | |
| ======================================================================================================== | |
| python manage.py makemigrations | |
| python manage.py migrate | |
| ======================================================================================================== | |
| python manage.py shell (набрати цю команду в Developer PowerShell) | |
| from django.apps import apps | |
| apps.get_models() | |
| from app.models import Author, Book | |
| # ── ДОДАВАННЯ ───────────────────────────────────────────────────────────────── | |
| author = Author.objects.create( | |
| name='Шевченко', | |
| birth_year=1814, | |
| rating=9.5 | |
| ) | |
| book = Book.objects.create( | |
| title='Кобзар', | |
| author=author, | |
| pages=325, | |
| price=150.00, | |
| published_year=1840, | |
| stock=10 | |
| ) | |
| # ── ПЕРЕГЛЯД ────────────────────────────────────────────────────────────────── | |
| Author.objects.all() # всі автори | |
| Author.objects.values() # як словники | |
| Author.objects.filter(rating__gte=7) # з рейтингом 7+ | |
| Author.objects.get(name='Шевченко') # один конкретний (кидає виняток якщо не знайдено) | |
| Book.objects.all() | |
| Book.objects.select_related('author').all() # з підтягуванням автора (JOIN, без N+1) | |
| Book.objects.filter(author__name='Шевченко') # книги конкретного автора | |
| # ── ОНОВЛЕННЯ ───────────────────────────────────────────────────────────────── | |
| # один запис | |
| author = Author.objects.get(name='Шевченко') | |
| author.rating = 10.0 | |
| author.save() | |
| # або одразу без fetch (один SQL UPDATE) | |
| Author.objects.filter(name='Шевченко').update(rating=10.0) | |
| # ── ВИДАЛЕННЯ ───────────────────────────────────────────────────────────────── | |
| # один запис | |
| author = Author.objects.get(name='Шевченко') | |
| author.delete() # видалить і всі його книги (CASCADE) | |
| # або одразу | |
| Author.objects.filter(birth_year__lt=1800).delete() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from django.core.management.base import BaseCommand | |
| from django.apps import apps | |
| from app.models import Author, Book | |
| class Command(BaseCommand): | |
| help = 'Наповнює базу даних початковими авторами та книгами' | |
| def handle(self, *args, **options): | |
| self.stdout.write(self.style.SUCCESS('Ласкаво просимо в кастомний шелл!')) | |
| # ініціалізація моделей (за потреби) | |
| apps.get_models() | |
| # створення першого автора та його книги | |
| author1 = Author.objects.create( | |
| name='Тарас Григорович Шевченко', | |
| birth_year=1814, | |
| rating=9.5 | |
| ) | |
| Book.objects.create( | |
| title='Кобзар', | |
| author=author1, | |
| pages=325, | |
| price=150.00, | |
| published_year=1840, | |
| stock=10 | |
| ) | |
| # створення другого автора та його книги | |
| author2 = Author.objects.create( | |
| name='Леся Українка', | |
| birth_year=1871, | |
| rating=9.6 | |
| ) | |
| Book.objects.create( | |
| title='Лісова пісня', | |
| author=author2, | |
| pages=123, | |
| price=250.00, | |
| published_year=1912, | |
| stock=20 | |
| ) | |
| self.stdout.write(self.style.SUCCESS('\nАвтори та книги створені успішно!\n')) | |
| # вивід результатів у консоль | |
| print('Всі автори:') | |
| print(Author.objects.all()) | |
| print('\nАвтори як словники:') | |
| print(list(Author.objects.values())) | |
| print('\nВсі книжки:') | |
| print(Book.objects.all()) | |
| print('\nВсі книжки як словники:') | |
| print(list(Book.objects.values())) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment