В предыдущей статье Джейкоб обсуждал использование драйвера 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.
Удачного кодирования!