Pull to refresh

Pyrant+PyModels — легчайшая замена Django ORM*

Reading time2 min
Views2.2K
Тихо и незаметно вышла ноль-первая версия библиотеки Pyrant, т.е. Pythonic Tyrant.

Pyrant — это полноценная питонья обвязка для Tokyo Tyrant, сетевого интерфейса для Tokyo Cabinet.

Tokyo Cabinet — это современное, легкое, гибкое и суперское хранилище данных (DBM). Оно поддерживает несколько типов БД, включая как простейшее key/value, так и «табличное», а вернее — документо-ориентированное. Последнее ставит Tokyo в один ряд с такими славными продуктами как CouchDB, MongoDB и др., при этом TC/TT значительно проще и легче, а поэтому быстрее. Кроме того, он поддерживает достаточно сложные запросы по данным (см. список операторов) с различением строчных и числовых значений. И еще для Tokyo Cabinet можно писать расширения на Lua.
А еще, а еще — PyModels! Да-да, Pyrant+PyModels уже сейчас сильно напоминает Django ORM. Только легче в сотни раз :)

Пример работы с Pyrant:

$ ttserver test.tct &
$ python
>>> import pyrant
>>> t = pyrant.Tyrant()
>>> t.query
[]
>>> t['guido'] = {'name': 'Guido', 'age': 53}
>>> t['larry'] = {'name': 'Larry', 'age': 55}
>>> t.query.filter(age__gt=53)
[(u'guido', {u'name': u'Guido', u'age': u'53'})]
>>> t.query.filter(name__matches='^.+ry$')
[(u'larry', {u'name': u'Larry', u'age': u'55'})]
>>> guys = t.query.filter(name='Guido') | t.query.filter(name='Larry')
>>> guys.columns('age')
[{u'age': u'53'}, {u'age': u'55'}]

Здесь мы видим, что числа сохраняются как строки (хотя по ним можно делать выборки и сортировку как по числам). Вышеупомянутая библиотека PyModels позволяет автоматически обрабатывать входящие и исходящие значения нужным образом, а также оборачивает результаты выборки в экземпляры моделей, так что в итоге всё максимально удобно:

>>> storage = Storage()    # использует Pyrant
>>> class Person(Model):
...     name = Property()
...     age = Number()
...     def __unicode__(self):
...         return self.name
>>> q = Person.query(storage).filter(name__contains='G')
>>> guido = q[0]
>>> guido
<Person Guido>
>>> guido.age
53

_________
Примечания:
* Pyrant+PyModels — действительно замена Django ORM, но серебряной пули нет. Давайте жить дружно. Базы данных всех типов, объединяйтесь. =)

UPD: Models были переименованы в PyModels, топик откорректирован.
Tags:
Hubs:
+29
Comments41

Articles