Social Profiles

My Projects

ORM. Использование SQLAlchemy.

Давным-давно, в доисторические времена, программистам приходилось изучать и конструировать сложные запросы к реляционным базам данных, что несколько усложняло работу (впрочем, на данный момент наметился тренд опять возвращаться к DSL для работы с БД). А когда появилось ООП увязать SQL запросы, код и новый стиль программирования стало еще сложнее.

Итак что же такое ORM? Это не более чем абривиатура от Object Relational Mapping и по простому обозначает работу с таблицами баз данных как с объектами языка программирования. ORM является по сути дела высокоуровневой надстройкой над драйвером БД который переводит ваши запросы в язык (SQL, или какой-нибудь еще) запросов для базы данных с которой вы работаете; немного проигрывая в производительности, но зато существенно упрощая разработку и поддержку проектов, делая работу с базами данных простой и понятной.

ORM (англ. Object-relational mapping, русск. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как коммерческие, так и свободные реализации этой технологии.

Довольно часто для небольших скрипто нужна база данных, но не хочется лишних зависиомстей от наличия в системе mysql сервера, поэтому в этом случае удобно использовать так называемы embedded database, например sqlite, это гораздо удобнее и быстрее чем работать с кучей текстовых файлов. Если возникает потребность в редактировании данных - нет проблем существует отличный плагин для FF -[http://code.google.com/p/sqlite-manager/](http://code.google.com/p/sqlite-manager/)

Итак к делу. Для питона фактически стандарт ORM для работы с реляционными базами данных это SQLAlchemy

Базово работа с БД (на уровне ORM, т.к. SQLAlchemy позволяет работать с бд и другими способами) выглядит так :

# -*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy.orm import mapper
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, Text, String

Base = declarative_base()

# определяем формат таблицы в БД.
# как бы пост для блога.
class CData(Base):
    __tablename__ = "cdata"

    id = Column(Integer, primary_key=True)
    url = Column(String)
    image = Column(String)
    title = Column(String)
    text = Column(Text)

    def __init__(self, url, image, title, text):
        self.url = url
        self.image = image
        self.title = title
        self.text = text

    def __repr__(self):
        return "CData '%s'" % (self.url)

db_engine = create_engine("sqlite:///data.db", echo=True)
# создадём таблицы
Base.metadata.create_all(db_engine)

# начинаем новую сессию работы с БД
Session = sessionmaker(bind=db_engine)
session = Session()

# таким образом можно добавить новый элемент
new_element = CData("http://blog.com", "http://coolpix.com/img434.jpg", "Nice Post", "Mark spomoni as a faggot")
session.add(new_element)

# посмотрим что уже есть в базе данных
for instance in session.query(CData).order_by(CData.id):
    print instance.title

# совершаем транзакцию
session.commit()

Как видите все достаточно просто. Работать с базой данных становится так же удобно как и со структурами языка программирования. В современных фрэймворках для разработки сайта так или иначе используется ОРМ, в джанге это своя реализация django-orm, но со множестве других, таких как flask, pyramids в основном используется как раз SQLAlchemy.

Дополнительные материалы. ~ хорошая статья на русском языке SQLAlchemy: как втянуться, статья от Armin Ronacher (разработчик фрэймворка Flask) SQLAlchemy and You и Официальная документация SQLAlchemy

comments powered by Disqus