Взаимодействие с БД в django. object relational...
TRANSCRIPT
![Page 1: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/1.jpg)
Лабораторная работа №3
Взаимодействие с БД в Django.
Object Relational Mapping
![Page 2: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/2.jpg)
Начнем
Лабораторная 3
Создадим проект:
Django-admin.py startproject booksdb
Настроим соединение с БД (settings.py): DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': ‘mydb',
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '1q2w3e', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
![Page 3: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/3.jpg)
Первое соединение с базой
Лабораторная 3
В каталоге проекта запустим оболочку Python:
python manage.py shell
В ней попробуем соединиться с базой :
from django.db import connection
cursor = connection.cursor()
![Page 4: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/4.jpg)
Первое приложение
Лабораторная 3
В каталоге проекта вызовем команду:
python manage.py startapp books
Результат:
books/
__init__.py
models.py
views.py
![Page 5: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/5.jpg)
Первая модель
Лабораторная 3
Models.py:
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
![Page 6: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/6.jpg)
Первая модель
Лабораторная 3
Models.py:
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
![Page 7: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/7.jpg)
Первая модель
Лабораторная 3
Models.py:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
![Page 8: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/8.jpg)
Установка модели
Лабораторная 3
settings.py: INSTALLED_APPS = (
#'django.contrib.auth',
#'django.contrib.contenttypes',
#'django.contrib.sessions',
#'django.contrib.sites',
#'django.contrib.messages',
#'django.contrib.staticfiles',
'bookdb.books',
}
python manage.py validate – проверка синтаксиса
python manage.py sqlall books – запуск генерации SQL запросов
Python manage.py syncdb – выполнение запросов
![Page 9: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/9.jpg)
Доступ к данным
Лабораторная 3
python manage.py shell
from books.models import Publisher
p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street', city='Boston', state_province='MA', country='U.S.A.', website='http://www.apress.com/')
p1.save()
p2 = Publisher(name="O'Reilly", address='10 Fawcett St.', city='Cambridge', state_province='MA', country='U.S.A.', website='http://www.oreilly.com/')
p2.save()
publisher_list = Publisher.objects.all()
publisher_list
![Page 10: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/10.jpg)
Строковое представление модели
Лабораторная 3
Добавим следующие строки в Models.py
Class Publisher:
def __unicode__(self):
return self.name
class Author:
def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name)
class Book:
def __unicode__(self):
return self.title
Результат: publisher_list = Publisher.objects.all()
[<Publisher: Addison-Wesley>, <Publisher: O'Reilly>]
![Page 11: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/11.jpg)
Изменение данных
Лабораторная 3
• Создадим новый объект:
• p = Publisher(name='Apress', address='2855 Telegraph Ave.', city='Berkeley', state_province='CA', country='U.S.A.', website='http://www.apress.com/')
• p.save()
• Получим id сохраненного объекта: p.id
• Присвоим новое значение: p.name = 'Apress Publishing'
p.save()
![Page 12: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/12.jpg)
Селекция данных
Лабораторная 3
• Publisher.objects.all() : SELECT id, name, address, city, state_province, country, website FROM book_publisher;
• Publisher.objects.filter(name='Apress') : SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name = 'Apress';
• Publisher.objects.filter(name__contains="press") : SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name LIKE '%press%';
• Один объект: Publisher.objects.get(name="Apress")
• Сортировка: Publisher.objects.order_by("name")
• Цепочка запросов: Publisher.objects.filter(country="U.S.A.").order_by("-name")
• Изменение мн-ва объектов одним запросом:
p = Publisher.objects.get(name='Apress')
p.name=“Apress Publishing”
p.save()
![Page 13: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим](https://reader031.vdocuments.mx/reader031/viewer/2022021510/5ab8359d7f8b9ad5338c92ed/html5/thumbnails/13.jpg)
Удаление данных
Лабораторная 3
• Определенный объект: p=Publisher.objects.get(name="O'Reilly")
p.delete()
• Выборка: Publisher.objects.filter(country='USA').delete()
• Все: Publisher.objects.all().delete()