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

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page