Взаимодействие с БД в Django. Object Relational...

13
Лабораторная работа №3 Взаимодействие с БД в Django. Object Relational Mapping

Transcript of Взаимодействие с БД в Django. Object Relational...

Page 1: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим

Лабораторная работа №3

Взаимодействие с БД в Django.

Object Relational Mapping

Page 2: Взаимодействие с БД в Django. Object Relational …it-claim.ru/Education/Course/ISDevelopment/Lab_3_slides.pdfНачнем Лабораторная 3 Создадим

Начнем

Лабораторная 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 Создадим

Первое соединение с базой

Лабораторная 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 Создадим

Первое приложение

Лабораторная 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 Создадим

Первая модель

Лабораторная 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 Создадим

Первая модель

Лабораторная 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 Создадим

Первая модель

Лабораторная 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 Создадим

Установка модели

Лабораторная 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 Создадим

Доступ к данным

Лабораторная 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 Создадим

Строковое представление модели

Лабораторная 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 Создадим

Изменение данных

Лабораторная 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 Создадим

Селекция данных

Лабораторная 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 Создадим

Удаление данных

Лабораторная 3

• Определенный объект: p=Publisher.objects.get(name="O'Reilly")

p.delete()

• Выборка: Publisher.objects.filter(country='USA').delete()

• Все: Publisher.objects.all().delete()