В предыдущей статье Джейкоб обсуждал использование драйвера Python NuoDB для использования возможностей NuoDB в Python. Это круто! Однако, хотя драйвер python полностью способен, для многих разработчиков взаимодействие с базой данных с помощью собственного SQL (1) создает проблемы безопасности, а (2) нарушает структуру в отношении объектно-ориентированной абстракции и дизайна.
В этой статье мы поговорим о SQLAlchemy , популярном объектно-реляционном картографе (ORM) для Python и о том, как его можно использовать для взаимодействия с NuoDB .
Я предполагаю общее знакомство и комфорт с Python. Вот повестка дня:
- Введение в объектно-реляционные картографы
- Установка модуля sqlalchemy_nuodb
- Примеры кода
Давайте начнем.
Вступление
Объектно-реляционные картографы существуют уже довольно давно и довольно популярны независимо от языка. Они существуют, прежде всего, для облегчения жизни разработчика, абстрагируя SQL в объекты, которые могут взаимодействовать с базой данных. Кроме того, ORM способствует объектно-ориентированной инкапсуляции данных, обеспечивает дополнительный уровень безопасности для базы данных и во многих случаях ускоряет разработку.
Итак, вы — разработчик Python, который хочет создавать масштабируемые облачные решения, возможно, следующее веб-приложение Facebook , которое будет обрабатывать сотни, возможно, тысячи запросов в секунду. Вам нужно, чтобы ваша база данных легко масштабировалась в зависимости от спроса при сохранении производительности (низкая задержка) и вы хотите использовать Python ORM. Это много. Я рад объявить о превосходном решении, SQLAlchemy, самой популярной ORM на основе Python в сочетании с NuoDB, масштабируемым, высокопроизводительным, гибким облачным решением для базы данных.
Давайте настроим все.
Установка
Прежде чем мы сможем установить модуль sqlalchemy_nuodb, модуль sqlalchemy должен быть установлен в нашей системе.
pip install sqlalchemy
Установка sqlalchemy_nuodb может быть выполнена в три этапа:
Шаг 1 — клонировать репо из GitHub
git clone https://github.com/nuodb/nuodb-sqlalchemy
Шаг 2 — смени каталог
cd nuodb-sqlalchemy
Шаг 3 — выполнить команду make
make install
Вот и все. Теперь у вас есть возможности NuoDB и SQLAlchemy!
Теперь давайте использовать его в нескольких примерах
Образцы кода
Для начала нам нужно импортировать модуль sqlalchemy_nuodb
import sqlalchemy_nuodb
Далее нам нужно создать маппер, который является объектным представлением таблицы в нашей базе данных NuoDB. Предполагая, что вы используете базу данных быстрого запуска NuoDB , давайте создадим маппер для таблицы `hockey`.
В nuosql описывается хоккейная таблица:
SQL> show hockey; Found table HOCKEY in schema HOCKEY ID integer NUMBER integer NAME string POSITION string TEAM string Index: HOCKEY..PRIMARY_KEY ID Index: PLAYER_IDX NUMBER NAME TEAM Domain HOCKEY not found anywhere! Sequence HOCKEY not found anywhere!
Мы можем использовать SQLAlchemy для представления вышеуказанной хоккейной таблицы как объекта следующим образом.
class Hockey(Base): __tablename__ = 'hockey' id = Column(Integer, primary_key=True) number = Column(Integer) name = Column(String) position = Column(String) team = Column(String) def __init__(self, id, number, name, position, team): self.id = id self.number = number self.name = name self.position = position self.team = team
Это оно! Класс Hockey теперь отображается на таблицу Hockey в NuoDB. Обратите внимание, что мы сопоставляем каждый из столбцов таблицы `hockey` с атрибутом класса Hockey. Мы также определяем таблицу, к которой этот класс соответствует, с __tablename__
Давайте соединим все это в рабочем примере, чтобы распечатать все записи строк в хоккейной таблице.
import sqlalchemy_nuodb from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String # perform simple query engine = create_engine("nuodb://dba:goalie@localhost:48004/test?schema=hockey", echo=True) # do same as above declaratively Base = declarative_base() # define hockey object class Hockey(Base): __tablename__ = 'hockey' id = Column(Integer, primary_key=True) number = Column(Integer) name = Column(String) position = Column(String) team = Column(String) def __init__(self, id, number, name, position, team): self.id = id self.number = number self.name = name self.position = position self.team = team def __repr__(self): return "" % (self.id, self.number, self.name, self.position, self.team) # bind to previously created engine & create a session Session = sessionmaker(bind=engine) session = Session() # print each row for row in session.query(Hockey).all(): print row
Давайте обновим Fan # 1, продемонстрированный в этом рабочем примере.
import sqlalchemy_nuodb from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String # perform simple query engine = create_engine("nuodb://dba:goalie@localhost:48004/test?schema=hockey", echo=True) # do same as above declaratively Base = declarative_base() # define hockey object class Hockey(Base): __tablename__ = 'hockey' id = Column(Integer, primary_key=True) number = Column(Integer) name = Column(String) position = Column(String) team = Column(String) def __init__(self, id, number, name, position, team): self.id = id self.number = number self.name = name self.position = position self.team = team def __repr__(self): return "" % (self.id, self.number, self.name, self.position, self.team) # bind to previously created engine & create a session Session = sessionmaker(bind=engine) session = Session() # print each row for row in session.query(Hockey).all(): print row hockey = session.query(Hockey).get(24) hockey.name = 'JOHN SMITH' session.commit() for row in session.query(Hockey).all(): print row
Резюме
Объектно-реляционные средства отображения облегчают разработчикам взаимодействие с SQL с использованием объектов, и SQLAlchemy, возможно, является самой популярной ORM в сообществе Python. Мы рады выпустить эту бета-версию для людей, чтобы создавать удивительные, масштабируемые приложения, использующие NuoDB.
Для получения дополнительной информации о SQLAlchemy я настоятельно рекомендую проверить их сайт , он хорошо документирован и имеет отличные примеры для выполнения более сложных запросов.
Кроме того, первый рабочий пример, описанный в этом посте, доступен на GitHub.
Удачного кодирования!