Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

UNKNOWN

Project Description
EasyCouch – ORM объертка вокруг python-couchdb.

Основной причиной создания велосипеда стала необходимость переосмысления работы с документ-ориентированными базами данных. Существующие решения в значительной степени копируют реляционный подход к хранению и доступу к данным, где крайне важным является такое понятие как схема данных. В отличии от реляционных БД, CouchDB позволяет вольно обращаться со структурой документа, что даёт свои преимущества. Так, например, разные расширения одного фреймворка могут использовать один и тот же документ БД для хранения своих данных, при этом удаление одного из расширений не должно преводить к сбою БД, как и установка.

Необходимость описания структуры документа (или его части) при использовании CouchDB возникает только из-за необходимости преобразовывать данные в строки для хранения в БД (кодировать) и обратно (декодировать). В случае простых типов данных (str, int, float) python делает эту работу за нас, но есть типы, например datetime, для которых подобное преобразование следует производить вручную. Необходимость проверять данные на соответствие ожиданиям, на мой взгляд, – дело библиотеки для работы с формами, такой как WTForms.

Ещё одна проблема, которую известные мне библиотеки не решают – вложеность документов. Это позволит работать с отдельными нодами документа как с самостоятельными документами.

Пример
======

'''
from easycouch import EasyCouch, Document, InlineDocument
from easycouch.properies import DateTimeProperty

class BlogPost(Document):
created_at = DateTimeProperty(auto_create_now = True)

class Comment(InlineDocument):
created_at = DateTimeProperty(auto_create_now = True)

db = EasyCouch()

db.register_document(BlogPost)
db.register_document(Comment)

p = BlogPost(title = "Test post", text = "Post content")
p.comments = [
Comment(text = "First Comment", comments = [Comment(text = "First comment child"),]),
Comment(text = "Second comment")
]
p.save()

p.comments[0].text
=> "Fist Comment"
p.comments[0].comments[0].created_at
=> datetime.datetime() object
'''
Release History

Release History

This version
History Node

0.3dev

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting