SlideShare a Scribd company logo
1 of 50
Download to read offline
Работа с базой.
Django ORM
СергейЛихобабин
Техносфера.2014
Где хранить данные
На клиенте
Cookie (4кб)
Web Storage
На сервере
В памяти
На диске
На диске и в памяти
Работа с базой
Представление о СУБД
Проектирование БД
Основные операции SQL
Работа с БДв Python
Работа с БДв Django
БД
Взаимосвязанные даные специальным образом
хранящиеся на каком-либо носителе
СУБД
Программный комплекс обеспечивающий работу с
данными в БД
Функции СУБД
Управление данными на дисках и в
оперативной памяти
Журнализация, резервное копирование
Реляционная модель
данных
Таблица -отношение, relation
Строка -кортеж, tuple
Столбец -атрибут, column
Реляционная модель
данных
Реляционная модель
данных
Задачи проектирования
Обеспечение хранения всей необходимой
информации
Обеспечение возможности получения данных
по всем запросам
Сокращение избыточности и дублирования
данных
Обеспечение целостности данных
Проектирование на
практике
Логическое разделение сущностей
Выделение первичных ключей
Связи 1:Nреализуются через внешний ключ
Связи N:M реализуются через промежуточную
таблицу
Аттрибут с фиксированным числом значений -
внешняя таблица либо enum
Основные операции SQL
SELECT
ELECT*FROMusersWHEREage>10;
ELECT*FROMusersWHEREname='masha';
ELECTMAX(age)FROMusers;
ELECTid,name,LENGTH(name)ASlen
ROMusers
HEREemailLIKE'%@mail.ru'ANDage>10
RDERBYnameDESC
IMIT10OFFSET15;
Агрегатные функции
COUNT, SUM, AVG, GROUP
ELECTname,count(id)cnt
ROMusers
ROUPBYname
RDERBYcnt
AVINGcnt>1
Join
ELECTh.name,a.name
ROMheroesh,abilitiesa
HEREh.id=a.hero_id;
ELECTh.name,a.name
ROMheroesh
NNERJOINabilitiesaONh.id=a.hero_id;
ELECTh.name,a.name
ROMheroesh
EFTJOINabilitiesaONh.id=a.hero_id;
Вложенные запросы
ELECTtitle
ROMarticlet1
OIN(
SELECTrubric_id,MAX(id)max_id
FROMarticle
GROUPBYrubric_idLIMIT5
t2
t1.id=t2.max_id;
INSERT, UPDATE, DELETE
NSERTINTOusers(name,age)VALUES('Petr',10);
PDATEusersSETage=20WHEREname='Petr';
PDATEusersSETrating=rating+1;
ELETEFROMusersWHEREname='Masha';
ELETEFROMusersWHEREage>150;
Индексы
Индексы на практике
Индексы для полей, по которым происходит
JOIN
Индексы для полей, по которым фильтруются
записи
Индексы для полей, по которым идет
сортировка
Проверять план выполнения запроса EXPLAIN
Управление оптимизатором запросов
Работа с БД в python
MySQLdb
mportMySQLdb
b=MySQLdb.connect(
host="localhost",user="bob",
passwd="secret",db="goodies"
ursor=db.cursor()
MySQLdb
ursor.execute(
'updateuserssetage=age+1wherename=%s',(name,)
ursor.execute('select*fromusers')
sers=cursor.fetchall()
ursor.execute(
'select*fromuserswherename=%s',(name,)
ser=cursor.fetchone()
MySQLdb
ursor.executemany(
"INSERTINTOusers(name,age)VALUES(%s,%s)",
[
("Igor",18),
("Petr",16),
("Dasha",17)
]
b.close()
Плейсхолдеры
mail="'OR'1'='1"
ursor.execute(
"SELECT*FROMusersWHEREemail='%s'"%email
Работа с БД в django
Классы в python
lassEmployee(object):
def__init__(self,name,salary):
self.name=name
self.salary=salary
defget_info(self):
return"Name:%s,Salary:%s"%(self.name,self.sal
lassProgrammer(Employee):
def__init__(self,name,salary,lang):
super(Programmer,self).__init__(name,salary)
self.lang=lang
Классы в python
>>e1=Programmer(u'Vasya',100,'VB')
>>printu'Welcome%s'%e1
elcomeVasya
>>e1.get_info()
'Name:Vasya,Salary:100'
>>e1.lang
VB'
Raw SQL vs ORM
ursor.execute('select*fromuserswhereage>18')
oruserincursor.fetchall():
pk,name,age=user
printname
VS
oruserinUser.objects.filter(age__gt=18):
printuser.name
Модели и типы данных
lassPost(models.Model):
title=models.CharField(max_length=255)
content=models.TextField()
creation_date=models.DateTimeField(
default=datetime.datetime.now
)
def__unicode__(self):
returnself.title
defget_absolute_url(self):
return'/post/%d/'%self.pk
classMeta:
ordering=['-creation_date’]
Модели и типы данных
Связи между таблицами
lassPost(models.Model):
title=models.CharField(max_length=255)
content=models.TextField()
creation_date=models.DateTimeField(
default=datetime.datetime.now
)
category=models.ForeignKey(
Category,on_delete=models.SET_NULL
)
tags=models.ManyToManyField(Tag)
ForeignKey, OneToOne
ForeignKey= IntegerField + Constraint
OneToOneField = ForeignKey+ unique
post.categoryVS post.category_id
Обратная связь -category.post_set
ForeignKey, OneToOne
Реакция на удаление внешнего ключа
RESTRICT-> models.PROTECT
CASCADE -> models.CASCADE
SETNULL -> models.SET_NULL
NO ACTION-> models.DO_NOTHING
ManyToManyField
post.tags -related manager
Обратная связь -tag.post_set
ORM API
ythonmanage.pyshell
>>fromblog.modelsimportCategory,Post
>>fromdjango.dbimportconnection
>>#Вставкаизамена
>>c=Category(title="Python")
>>c.save()
>>c.id
>>c.title="AboutPython"
>>c.save()
ORM API
>>print'n'.join(q['sql']forqinconnection.queries)
NSERTINTO`blog_category`(`title`,
description`)VALUES('Python','')
ELECT(1)AS`a`FROM`blog_category`WHERE
blog_category`.`id`=1LIMIT1
PDATE`blog_category`SET`title`='About
ython',`description`=''WHERE
blog_category`.`id`=1
ORM API
>>Category.objects.all()
<Category:AboutPython>]
>>printCategory.objects.all().query
ELECT`blog_category`.`id`,
blog_category`.`title`,
blog_category`.`description`FROM`blog_category`
>>Category.objects.filter(id=1)
<Category:AboutPython>]
>>c=Category.objects.get(id=1)
>>c
Category:AboutPython>
>>c.post_set.all()
ORM API
>>c.post_set.create(title="Newpost",content="Manywords")
Post:Newpost>
>>c.post_set.count()
>>p=Post.objects.get(title="Newpost")
>>p.category
Category:AboutPython>
>>p.category_id
>>Post.objects.filter(category__title="AboutPython")
Post:Newpost>
>>c.delete()
Debug Toolbar
https://github.com/django-debug-
toolbar/django-debug-toolbar
Manager
slice [10:20]
.all(), .filter(), exclude(), .order_by()
.values(), .values_list()
.get(), .get_or_create(), .count(), .exists()
.select_related(), prefetch_related()
.update(), .delete()
RelatedManager
.create(**kwargs)
.add(obj1[, obj2, ...])
.remove(obj1[, obj2, ...])
.clear()
Ленивое выполнение
QuerySet
s=Category.objects.all()
notuser.is_admin:
qs=qs.filter(active=True)
rintqs.count()
Избегайте лишних
запросов в базу
Foreign keyкэшируется
ost.category
Queryset-нет
uestion_list=list(Question.objects.all())
Атомарное обновление
QuerySet
uestion.objects.filter(pk=10)
update(rating=models.F('rating')+1)
Полезные команды
Проверка моделей
ythonmanage.pyvalidate
Вывод SQL
ythonmanage.pysqlall<app_name>
</app_name>
Выполнение SQL в базе
ythonmanage.pysyncdb
Миграции
DROP DATABASE, CREATE DATABASE
DROP TABLE, CREATE TABLE
ALTERTABLE
South
South
Автоматическое создание миграций
Поддержка различных СУБД
Прямые и обратные миграции
Инициализация South
1. Создать миграцию
2. Применить миграцию
./manage.pyschemamigrationask--initial
./manage.pymigrateask
Миграция с South
1. Изменить модель
2. Создать миграцию
3. Применить миграцию
./manage.pyschemamigrationask--auto
/manage.pymigrateask
Полезные ссылки
MySQL
http://dev.mysql.com/doc/refman/5.5/en/index.html
Mysqldb http://mysql-
python.sourceforge.net/MySQLdb.html
Django http://docs.djangoproject.com/en/dev/
Django DebugToolbar https://github.com/django-
debug-toolbar/django-debug-toolbar
Спасибо за внимание
СергейЛихобабин
s.lihobabin@corp.mail.ru

More Related Content

What's hot

MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
кбнти
кбнтикбнти
кбнти
Normdocs
 
Возможности 1С Документооборот 8
Возможности 1С Документооборот 8Возможности 1С Документооборот 8
Возможности 1С Документооборот 8
share_1ab
 
Ссылки в нормативных документах
Ссылки в нормативных документахСсылки в нормативных документах
Ссылки в нормативных документах
Andrey Subbota
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 

What's hot (12)

MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
кбнти
кбнтикбнти
кбнти
 
Презентация "1С:Документооборот на интерфейсе ТАКСИ – легкое решение"
Презентация "1С:Документооборот на интерфейсе ТАКСИ – легкое решение"Презентация "1С:Документооборот на интерфейсе ТАКСИ – легкое решение"
Презентация "1С:Документооборот на интерфейсе ТАКСИ – легкое решение"
 
Возможности 1С Документооборот 8
Возможности 1С Документооборот 8Возможности 1С Документооборот 8
Возможности 1С Документооборот 8
 
1C:Документооборот 8
1C:Документооборот 81C:Документооборот 8
1C:Документооборот 8
 
Ссылки в нормативных документах
Ссылки в нормативных документахСсылки в нормативных документах
Ссылки в нормативных документах
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
Android - 12 - Data types
Android - 12 - Data typesAndroid - 12 - Data types
Android - 12 - Data types
 
DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единым
 
Презентация 1С:Документооборот 8
Презентация 1С:Документооборот 8Презентация 1С:Документооборот 8
Презентация 1С:Документооборот 8
 

Viewers also liked

L13: Заключительная
L13: ЗаключительнаяL13: Заключительная
L13: Заключительная
Technosphere1
 

Viewers also liked (20)

Л8 Django. Дополнительные темы
Л8 Django. Дополнительные темыЛ8 Django. Дополнительные темы
Л8 Django. Дополнительные темы
 
Лекция 5 Серверная разработка
Лекция 5 Серверная разработкаЛекция 5 Серверная разработка
Лекция 5 Серверная разработка
 
Webdev7 (2)
Webdev7 (2)Webdev7 (2)
Webdev7 (2)
 
L4: Решающие деревья
L4: Решающие деревьяL4: Решающие деревья
L4: Решающие деревья
 
L8: Л7 Em-алгоритм
L8: Л7 Em-алгоритмL8: Л7 Em-алгоритм
L8: Л7 Em-алгоритм
 
Мастер-класс: "Интеграция в промышленную разработку"
Мастер-класс: "Интеграция в промышленную разработку"Мастер-класс: "Интеграция в промышленную разработку"
Мастер-класс: "Интеграция в промышленную разработку"
 
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
 
Webdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django ViewsWebdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django Views
 
Л9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложенийЛ9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложений
 
L5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмыL5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмы
 
Мастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного вебМастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного веб
 
Web лекция 1
Web   лекция 1Web   лекция 1
Web лекция 1
 
L10: Алгоритмы кластеризации
L10: Алгоритмы кластеризацииL10: Алгоритмы кластеризации
L10: Алгоритмы кластеризации
 
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
 
L13: Заключительная
L13: ЗаключительнаяL13: Заключительная
L13: Заключительная
 
L7:Задача кластеризации. Метрики качества
L7:Задача кластеризации. Метрики качестваL7:Задача кластеризации. Метрики качества
L7:Задача кластеризации. Метрики качества
 
Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана" Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана"
 
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
 
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибок
 

Similar to Лекция 6: Работа с данными. Django ORM

NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
8 класс ктп
8 класс ктп8 класс ктп
8 класс ктп
kpako
 
Database Tuning Method & Technics
Database Tuning Method & TechnicsDatabase Tuning Method & Technics
Database Tuning Method & Technics
Denis Beskov
 
рит2007 оптимизация бд бесков доронин
рит2007   оптимизация бд   бесков доронинрит2007   оптимизация бд   бесков доронин
рит2007 оптимизация бд бесков доронин
Media Gorod
 
8 класс ктп
8 класс ктп8 класс ктп
8 класс ктп
kpako
 
Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3
Dmitry Gridnev
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
Andrey Akulov
 

Similar to Лекция 6: Работа с данными. Django ORM (20)

NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Firebird DataGuard - Еще раз об уверенности в завтрашнем дне
Firebird DataGuard -  Еще раз об уверенности в завтрашнем днеFirebird DataGuard -  Еще раз об уверенности в завтрашнем дне
Firebird DataGuard - Еще раз об уверенности в завтрашнем дне
 
Firebird Dataguard (Russian)
Firebird Dataguard (Russian)Firebird Dataguard (Russian)
Firebird Dataguard (Russian)
 
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
 
8 класс ктп
8 класс ктп8 класс ктп
8 класс ктп
 
Database Tuning Method & Technics
Database Tuning Method & TechnicsDatabase Tuning Method & Technics
Database Tuning Method & Technics
 
Базы данных лекция №11
Базы данных лекция №11Базы данных лекция №11
Базы данных лекция №11
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
рит2007 оптимизация бд бесков доронин
рит2007   оптимизация бд   бесков доронинрит2007   оптимизация бд   бесков доронин
рит2007 оптимизация бд бесков доронин
 
8 класс ктп
8 класс ктп8 класс ктп
8 класс ктп
 
Введение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPCВведение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPC
 
Введение в gRPC
Введение в gRPCВведение в gRPC
Введение в gRPC
 
Введение в gRPC
Введение в gRPCВведение в gRPC
Введение в gRPC
 
Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RU
 
Управление Данными. Лекция 1
Управление Данными. Лекция 1Управление Данными. Лекция 1
Управление Данными. Лекция 1
 

More from Technosphere1

More from Technosphere1 (12)

Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение"
 
Лекция №13 "Глубокие нейронные сети"
Лекция №13 "Глубокие нейронные сети" Лекция №13 "Глубокие нейронные сети"
Лекция №13 "Глубокие нейронные сети"
 
Лекция №11 "Основы нейронных сетей"
Лекция №11 "Основы нейронных сетей" Лекция №11 "Основы нейронных сетей"
Лекция №11 "Основы нейронных сетей"
 
Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"
 
Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства" Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства"
 
Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов" Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов"
 
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии"
 
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes"
 
Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"
 
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
 
Лекция №1 "Задачи Data Mining"
Лекция №1 "Задачи Data Mining" Лекция №1 "Задачи Data Mining"
Лекция №1 "Задачи Data Mining"
 
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"
 

Лекция 6: Работа с данными. Django ORM