Невозможно отобразить презентацию
Похожие презентации:
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)
Служит для синхронизации объектов 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)
Программное обеспечение
Базы данных