Storm имеет возможно самый простой API:
from storm.locals import *
class Foo:
__storm_table__ = 'foos'
id = Int(primary=True)
class Thing:
__storm_table__ = 'things'
id = Int(primary=True)
name = Unicode()
description = Unicode()
foo_id = Int()
foo = Reference(foo_id, Foo.id)
db = create_database('sqlite:')
store = Store(db)
foo = Foo()
store.add(foo)
thing = Thing()
thing.foo = foo
store.add(thing)
store.commit()
И это делает его безболезненным к выпадающему в необработанный SQL, когда Вы должны:
store.execute('UPDATE bars SET bar_name=? WHERE bar_id like ?', [])
store.commit()
Я только что обнаружил with-out-str из этого замечательного сообщения в блоге , подробно описывающего обработку XML в Clojure.
Итак, правильная реализация мой пример:
(def xml (with-out-str (prxml [:p "Test"])))
В более общем плане, если вы посмотрите на исходный код with-out-str
, вы увидите, как динамически привязать * out *
к любому потоку используя привязку
. Это работает для динамической установки значения любой существующей переменной.