Давным-давно, в доисторические времена, программистам приходилось изучать и конструировать сложные запросы к реляционным базам данных, что несколько усложняло работу (впрочем, на данный момент наметился тренд опять возвращаться к 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