SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Реляционные
базы данных
Решаемые проблемы
•   Структура хранения
•   Эффективный поиск данных
•   Управление памятью
•   Совместный доступ к данным
•   Атомарные операции - транзакции
•   Язык управления базой и данными - 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

Mais conteúdo relacionado

Mais procurados

I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
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 MySQLNoveo
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPavel Vlasov
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregationAcceptic
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"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_newInSales
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 

Mais procurados (20)

I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Server optimization
Server optimizationServer optimization
Server optimization
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregation
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 
Django
DjangoDjango
Django
 
Templates kachalova 2014_new
Templates kachalova 2014_newTemplates kachalova 2014_new
Templates kachalova 2014_new
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Yii development
Yii developmentYii development
Yii development
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 

Destaque

09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAXRoman 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 - Установка macOSRoman Brovko
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка XcodeRoman 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
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backendRoman Brovko
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSFRoman Brovko
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTPRoman Brovko
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)Ontico
 

Destaque (18)

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

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

Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?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 уч. год, занятие 087bits
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных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 DummiesGlobalLogic Ukraine
 
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данныхAlex Polorotov
 
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данныхVitaliy Trenkenshu
 
Лекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORMЛекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORMTechnosphere1
 
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
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 

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

Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
 
базы данных
базы данныхбазы данных
базы данных
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы
 
Object-Relational Mapping for Dummies
Object-Relational Mapping for DummiesObject-Relational Mapping for Dummies
Object-Relational Mapping for Dummies
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данных
 
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
 
Лекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORMЛекция 6: Работа с данными. Django ORM
Лекция 6: Работа с данными. Django ORM
 
9946
99469946
9946
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 

Mais de Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman 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_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman 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_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 

Mais de Roman Brovko (20)

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

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