Skip to main content

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
'''

Project details


Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page