Невозможно отобразить презентацию

SQLAlchemy

SQLAlchemy - это программная библиотека на языке Python для работы с реляционными СУБД* с применением технологии ORM*.

Служит для синхронизации объектов Python и записей реляционной базы данных.

- Выпущена в 2006 году.

Создатель - Mike Bayer.

- Работает с MySQL, PostgreSQL, SQLite, Oracle и др.

- Используют: SQLAlchemy - это полный набор хорошо известных шаблонов корпоративного уровня стабильности, сконструированных для высокопроизводительного доступа к базе данных, написанных простым языком Python.

Философия SQLAlchemy “SQL databases behave less like object collections the more size and performance start to matter;

object collections behave less like tables and rows the more abstraction starts to matter.

SQLAlchemy aims to accommodate both of these principles.” From http://www.sqlalchemy.org/ “Базы данных SQL ведут тем менее похоже на коллекции объектов чем больше начинают значить размер и производительность, и наоборот, коллекции объектов начинают вести тем менее похоже на таблицы и записи чем более начинает значить уровень абстракции” Основные возможности: - Использование ORM не является обязательным - Поддержка транзакций - Создание запросов с использованием функций и выражений Python - Модульность и расширяемость - Дополнительная возможность раздельного определения объектного отображения и классов - Поддержка составных индексов - Поддержка отношений между классами, в том числе «один-ко-многим» и «многие-ко-многим» - Поддержка ссылающихся на себя объектов - Предварительная и последующая обработка данных (параметров запроса, результата) Преимущества использования: Использование SQLAlchemy для автоматической генерации SQL-кода имеет несколько преимуществ по сравнению с ручным написанием SQL: - Безопасность.

Параметры запросов экранируются, что делает атаки типа внедрение SQL-кода маловероятными.- Производительность.

Повышается вероятность повторного использования запроса к серверу базы данных, что может позволить ему в некоторых случаях применить повторно план выполнения запроса.- Переносимость.

SQLAlchemy, при должном подходе, позволяет писать код на Python, совместимый с несколькими back-end СУБД.

Несмотря на стандартизацию языка SQL, между базами данных имеются различия в его реализации, абстрагироваться от которых и помогает SQLAlchemy.

Есть четыре обычных способа использования SQLAlchemy: Расширение Flask-SQLAlchemy Не требует предварительной настройки.

Используют, если нужно быстро начать работу.

Declarative Расширение declarative в SQLAlchemy - это один из наиболее частых способов использования SQLAlchemy.

Оно позволяет вам определять таблицы и модели одновременно.

Ручное объектно-реляционное отображение Таблицы и классы определяются раздельно, а затем создаётся их взаимное отображение.

Этот подход более гибок, однако и более трудоёмок.

В целом он работает подобно декларативному подходу.

Используют функцию mapper.

Этот стиль ценится за разделение задач.

Слой абстракции над SQL Если использовать только слой абстракции к базам данных (и SQL) Работа с Declarative Расширение declarative в SQLAlchemy - это один из наиболее частых способов использования SQLAlchemy.

Оно позволяет вам определять таблицы и модели одновременно.

database.py : Вотпримермодулядляприложения from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) Base = declarative_base() Base.query = db_session.query_property() def init_db(): # , , Здесьнужноимпортировать всемодулигдемогутбытьопределенымодели # .

которыенеобходимымобразоммогутзарегистрироваться вметаданных # init_db() Впротивномслучаеихнужнобудетимпортировать довызова import yourapplication.models Base.metadata.create_all(bind=engine) * чтобы соединиться с СУБД, мы используем функцию create_engine().

*[Флаг echo= True - увидим все созданные нами SQL- запросы] * При создании собственных моделей, наследуйте от класса Base, который создан вышеприведённым кодом * О потоках не заботимся.

SQLAlchemy делает это самостоятельно при помощи scoped_session Чтобы использовать SQLAlchemy в приложении декларативным образом, необходимо поместить в модуль вашего приложения следующий код.

from yourapplication.database import db_session @app.teardown_request def shutdown_session(exception=None): db_session.remove() * Flask автоматически удалит за вас сеанс базы данных в конце запроса: Далее мы пожелаем рассказать SQLAlchemy о наших таблицах.

Мы начнем с одиночной таблицы users.

Вот пример модели (поместите его, например, в models.py): from sqlalchemy import Column, Integer, String from yourapplication.database import Base class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50), unique=True) email = Column(String(120), unique=True) def __init__(self, name=None, email=None): self.name = name self.email = email def __repr__(self): return '<User %r>' % (self.name) * __init__ — это конструктор, __repr__ же вызывается при операторе print.

Они определены здесь для удобства.

Они не обязательны и могут иметь любую форму.

SQLAlchemy не вызывает __init__ напрямую Для создания базы данных можно воспользоваться функцией init_db: >>> from yourapplication.database import init_db >>> init_db() Вот так можно добавить новые записи в базу данных: >>> from yourapplication.database import db_session >>> from yourapplication.models import User >>> u = User('admin', 'admin@localhost') >>> db_session.add(u) >>> db_session.commit() Пример запроса: >>> User.query.all() [<User u'admin'>] >>> User.query.filter(User.name == 'admin').first() <User u'admin'> Литература: 1.

http://docs.sqlalchemy.org/en/latest/orm/tutorial.html (http://ru.wikibooks.org/wiki/SQLAlchemy) 2.

http://flask.pocoo.org/docs/patterns/sqlalchemy/ (https://flask-russian- docs.readthedocs.org/ru/latest/patterns/sqlalchemy.html)
English     Русский Правила