ݺߣ

ݺߣShare a Scribd company logo
Реляционные
базы данных
Решаемые проблемы
• Структура хранения
• Эффективный поиск данных
• Управление памятью
• Совместный доступ к данным
• Атомарные операции - транзакции
• Язык управления базой и данными - SQL
2
Реляционная модель данных
Данные хранятся в виде таблиц. У каждой таблицы фиксированное
число столбцов. Все данные в столбце одного типа.
3
Проектирование базы данных
Основная задача проектирования - сокращение избыточности и
дублирования данных.
Существуют формальные правила проверки схемы базы данных на
«правильность» - нормальные формы базы данных.
4
Проектирование на практике
• Логическое разделение сущностей
• Выделение синтетических первичных ключей
• Связи 1:N, N:1 реализуются через внешний ключ
• Связи N:M реализуются через промежуточную таблицу
• Атрибут с фиксированным числом значений – внешняя таблица
либо поле типа enum
5
Базы данных в
Python
Подключение к базе
Полное интерфейса для работы с СУБД в PEP-0249
import MySQLdb
db = MySQLdb.connect(host="localhost", user="joe",
passwd="moonpie", db="thangs")
cursor = db.cursor()
# запросы с использованием cursor
db.commit()
db.close()
7
Выполнение запросов
cursor.execute("""
update users set age = age + 1 where name = %s
""", (name,))
cursor.execute("select * from users")
users = cursor.fetchall()
cursor.execute("""
select * from users where name = %s
""", (name,))
user = cursor.fetchone()
8
Вставка многих записей
cursor.executemany(
"INSERT INTO users (name, age) VALUES (%s, %s)",
[
("Igor", 18 ),
("Petr", 16 ),
("Dasha", 17 )
]
)
db.commit()
db.close()
9
Placeholders
email = "' OR '1'='1"
cursor.execute(
"SELECT * FROM users WHERE email = '" + email + "'"
)
cursor.execute(
"SELECT * FROM users WHERE email = '%s'",
email
)
10
Базы данных в
Django
Прямой доступ к базе
from django.db import connection, connections
cur = connection.cursor()
cur.execute("select * from tbl limit 10")
default_cur = connections['default'].cursor()
default_cur.execute("select * from tbl2 limit 10")
another_cur = connections['another'].cursor()
another_cur.execute("select * from tbl2 limit 10")
12
Полезные утилиты
• ./manage.py validate - проверить структуру моделей
• ./manage.py syncdb - создать таблицы в базе (1 раз)
• ./manage.py shell - запустить python shell
• ./manage.py dbshell - запустить клиент базы данных
13
Django Models
ORM - Object relational mapping - библиотек предоставляющая
объектно-ориентированный интерфейс к реляционной базе
данных. Django Models - библиотека ORM в Djnago.
Django SQL
класс Модели Таблица
объект модели строка таблицы
QuerySet запрос
14
ORM vs SQL
cursor.execute('select * from users where age > 18')
for user in cursor.fetchall():
pk, name, age = user
print name
for user in User.objects.filter(age__gt=18):
print user.name
15
Модели Django
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
creation_date = models.DateTimeField(blank=True)
def __unicode__(self):
return self.title
def get_absolute_url(self):
return '/post/%d/' % self.pk
class Meta:
db_table = 'blogposts'
ordering = ['-creation_date']
16
Типы полей
Django MySQL
CharField VARCHAR(N)
EmailField
TextField LONGTEXT
BooleanField TINYINT(1)
IntegerField INT(11)
DateField DATE
DateTimeField DATETIME
17
Свойства полей
• blank - поле может быть пустым
• null - при этом хранится в базе как NULL
• max_length - максимальная длина поля
• primary_key - это поле - первичный ключ
• unique - поле уникально
• db_index - для этого поля нужен индекс в базе
• default - значение по-умолчанию
• choices - варианты значений
18
Связи между
моделями
Связи между моделями
class Post(models.Model):
title = models.CharField(max_length=255)
# еще поля...
category = models.ForeignKey(Category,
null=True, on_delete=models.SET_NULL)
status = models.OneToOneField(PostStatus)
tags = models.ManyToManyField(Tag)
20
Реализация в СУБД
21
Ограничения внешних ключей
Применимо к полям типа ForeignKey , OneToOneField
• RESTRICT → models.PROTECT
• CASCADE → models.CASCADE
• SET NULL → models.SET_NULL
• NO ACTION → models.DO_NOTHING
22
Использование отношений в коде
# прямое использование
post = Post.objects.get(pk=1)
category = post.category # Category
category_id = post.category_id # int
status = post.status # Status
status_id = post.status_id # int
tags_manager = post.tags # RelatedManager
post.tags.all() # [ Tags ]
# использование обратного отношения
category.post_set.all() # [ Post ]
tag.post_set.all() # [ Post ]
23

More Related Content

What's hot (20)

I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
ITmozg
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
Илья Барышев
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregation
Acceptic
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
Viktor Likin
Django
DjangoDjango
Django
Sergey Maslennikov
Templates kachalova 2014_new
Templates kachalova 2014_newTemplates kachalova 2014_new
Templates kachalova 2014_new
InSales
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
Pavlo Iuriichuk
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
ITmozg
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Глеб Тарасов
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
ITmozg
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregation
Acceptic
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
Viktor Likin
Templates kachalova 2014_new
Templates kachalova 2014_newTemplates kachalova 2014_new
Templates kachalova 2014_new
InSales
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
ITmozg
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Глеб Тарасов
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov

Viewers also liked (18)

09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
Roman Brovko
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
Roman Brovko
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
Roman Brovko
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
Roman Brovko
17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения
Roman Brovko
02 - Установка macOS
02 - Установка macOS02 - Установка macOS
02 - Установка macOS
Roman Brovko
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
Roman Brovko
01 - Системные требования
01 - Системные требования01 - Системные требования
01 - Системные требования
Roman Brovko
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений
Roman Brovko
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
Roman Brovko
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
Roman Brovko
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
Roman Brovko
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
Nikolai Kireev
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
Roman Brovko
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
Roman Brovko
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP
Roman Brovko
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
Roman Brovko
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Ontico
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
Roman Brovko
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
Roman Brovko
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
Roman Brovko
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
Roman Brovko
17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения
Roman Brovko
02 - Установка macOS
02 - Установка macOS02 - Установка macOS
02 - Установка macOS
Roman Brovko
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
Roman Brovko
01 - Системные требования
01 - Системные требования01 - Системные требования
01 - Системные требования
Roman Brovko
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений
Roman Brovko
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
Roman Brovko
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
Roman Brovko
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
Roman Brovko
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
Nikolai Kireev
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
Roman Brovko
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
Roman Brovko
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP
Roman Brovko
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
Roman Brovko
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Ontico

Similar to 11 - Web-технологии. Работа с СУБД (20)

Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
Python-for-Data-Analysis, Pandas, Numpy,SeabornPython-for-Data-Analysis, Pandas, Numpy,Seaborn
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
YanaSemakina1
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Yandex
базы данных
базы данныхбазы данных
базы данных
Алексей Орловский
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
7bits
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
7bits
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
Levon Avakyan
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы
Roman Brovko
Object-Relational Mapping for Dummies
Object-Relational Mapping for DummiesObject-Relational Mapping for Dummies
Object-Relational Mapping for Dummies
GlobalLogic Ukraine
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
Andrey Dolinin
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
Andrey Dolinin
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данных
Alex Polorotov
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
Vitaliy Trenkenshu
Лекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORMЛекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORM
Technosphere1
9946
99469946
9946
nreferat
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
Alex Ott
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
Python-for-Data-Analysis, Pandas, Numpy,SeabornPython-for-Data-Analysis, Pandas, Numpy,Seaborn
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
YanaSemakina1
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Yandex
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
7bits
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
7bits
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
Levon Avakyan
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы
Roman Brovko
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данных
Alex Polorotov
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
Vitaliy Trenkenshu
Лекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORMЛекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORM
Technosphere1
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
Alex Ott

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
Roman Brovko
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
Roman Brovko
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
Roman Brovko
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
Roman Brovko
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
Roman Brovko
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
Roman Brovko
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
Roman Brovko
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
Roman Brovko
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
Roman Brovko
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
Roman Brovko
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
Roman Brovko
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
Roman Brovko
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
Roman Brovko
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
Roman Brovko
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
Roman Brovko
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
Roman Brovko
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
Roman Brovko
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
Roman Brovko
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
Roman Brovko
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
Roman Brovko
Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
Roman Brovko
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
Roman Brovko
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
Roman Brovko
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
Roman Brovko
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
Roman Brovko
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
Roman Brovko
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
Roman Brovko
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
Roman Brovko
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
Roman Brovko
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
Roman Brovko
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
Roman Brovko
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
Roman Brovko
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
Roman Brovko
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
Roman Brovko
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
Roman Brovko
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
Roman Brovko
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
Roman Brovko
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
Roman Brovko
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
Roman Brovko

11 - Web-технологии. Работа с СУБД

  • 2. Решаемые проблемы • Структура хранения • Эффективный поиск данных • Управление памятью • Совместный доступ к данным • Атомарные операции - транзакции • Язык управления базой и данными - SQL 2
  • 3. Реляционная модель данных Данные хранятся в виде таблиц. У каждой таблицы фиксированное число столбцов. Все данные в столбце одного типа. 3
  • 4. Проектирование базы данных Основная задача проектирования - сокращение избыточности и дублирования данных. Существуют формальные правила проверки схемы базы данных на «правильность» - нормальные формы базы данных. 4
  • 5. Проектирование на практике • Логическое разделение сущностей • Выделение синтетических первичных ключей • Связи 1:N, N:1 реализуются через внешний ключ • Связи N:M реализуются через промежуточную таблицу • Атрибут с фиксированным числом значений – внешняя таблица либо поле типа enum 5
  • 7. Подключение к базе Полное интерфейса для работы с СУБД в PEP-0249 import MySQLdb db = MySQLdb.connect(host="localhost", user="joe", passwd="moonpie", db="thangs") cursor = db.cursor() # запросы с использованием cursor db.commit() db.close() 7
  • 8. Выполнение запросов cursor.execute(""" update users set age = age + 1 where name = %s """, (name,)) cursor.execute("select * from users") users = cursor.fetchall() cursor.execute(""" select * from users where name = %s """, (name,)) user = cursor.fetchone() 8
  • 9. Вставка многих записей cursor.executemany( "INSERT INTO users (name, age) VALUES (%s, %s)", [ ("Igor", 18 ), ("Petr", 16 ), ("Dasha", 17 ) ] ) db.commit() db.close() 9
  • 10. Placeholders email = "' OR '1'='1" cursor.execute( "SELECT * FROM users WHERE email = '" + email + "'" ) cursor.execute( "SELECT * FROM users WHERE email = '%s'", email ) 10
  • 12. Прямой доступ к базе from django.db import connection, connections cur = connection.cursor() cur.execute("select * from tbl limit 10") default_cur = connections['default'].cursor() default_cur.execute("select * from tbl2 limit 10") another_cur = connections['another'].cursor() another_cur.execute("select * from tbl2 limit 10") 12
  • 13. Полезные утилиты • ./manage.py validate - проверить структуру моделей • ./manage.py syncdb - создать таблицы в базе (1 раз) • ./manage.py shell - запустить python shell • ./manage.py dbshell - запустить клиент базы данных 13
  • 14. Django Models ORM - Object relational mapping - библиотек предоставляющая объектно-ориентированный интерфейс к реляционной базе данных. Django Models - библиотека ORM в Djnago. Django SQL класс Модели Таблица объект модели строка таблицы QuerySet запрос 14
  • 15. ORM vs SQL cursor.execute('select * from users where age > 18') for user in cursor.fetchall(): pk, name, age = user print name for user in User.objects.filter(age__gt=18): print user.name 15
  • 16. Модели Django class Post(models.Model): title = models.CharField(max_length=255) content = models.TextField() creation_date = models.DateTimeField(blank=True) def __unicode__(self): return self.title def get_absolute_url(self): return '/post/%d/' % self.pk class Meta: db_table = 'blogposts' ordering = ['-creation_date'] 16
  • 17. Типы полей Django MySQL CharField VARCHAR(N) EmailField TextField LONGTEXT BooleanField TINYINT(1) IntegerField INT(11) DateField DATE DateTimeField DATETIME 17
  • 18. Свойства полей • blank - поле может быть пустым • null - при этом хранится в базе как NULL • max_length - максимальная длина поля • primary_key - это поле - первичный ключ • unique - поле уникально • db_index - для этого поля нужен индекс в базе • default - значение по-умолчанию • choices - варианты значений 18
  • 20. Связи между моделями class Post(models.Model): title = models.CharField(max_length=255) # еще поля... category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL) status = models.OneToOneField(PostStatus) tags = models.ManyToManyField(Tag) 20
  • 22. Ограничения внешних ключей Применимо к полям типа ForeignKey , OneToOneField • RESTRICT → models.PROTECT • CASCADE → models.CASCADE • SET NULL → models.SET_NULL • NO ACTION → models.DO_NOTHING 22
  • 23. Использование отношений в коде # прямое использование post = Post.objects.get(pk=1) category = post.category # Category category_id = post.category_id # int status = post.status # Status status_id = post.status_id # int tags_manager = post.tags # RelatedManager post.tags.all() # [ Tags ] # использование обратного отношения category.post_set.all() # [ Post ] tag.post_set.all() # [ Post ] 23