Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting

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

Written on 31/05/2011 – 2:58 am | by webninja |

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

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

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

На текущем этапе своей карьеры программиста я использую sqlite практически в каждом скрипте, это гораздо удобнее и быстрее чем работать с кучей текстовых файлов. Если возникает потребность в редактировании данных – нет проблем существует отличный плагин для FF – http://code.google.com/p/sqlite-manager/

Итак к делу. Для питона есть отличная реализация 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: как втянуться
Официальная документация SQLAlchemy

Related posts:

  1. Проверка Google PR на Python
  2. Типы данных, основные конструкции. Python.
  3. Проверка подключения к интернету
  4. Проверка количества проиндексированных страниц в Google
  5. Регулярные выражения в Python

My blog is Do-Follow


Пишу код, делаю сайты.
Check out my about.me profile!

парсинг сайтов, форумов, интернет магазинов

Want to subscribe?

istinspring twitter account
istinspring facebook account

 Subscribe in a reader Or, subscribe via email:
Enter your email address:  
Find entries :