alexandra is a thin abstraction over pycassa to interact with Cassandra from Django.
Requires Django and pycassa 0.20 or greater:
pip install -e git+http://github.com/dziegler/alexandra.git#egg=alexandra
add CASSANDRA_CLUSTER and CASSANDRA_KEYSPACE to settings.py
CASSANDRA_CLUSTER = ['localhost:9160'] CASSANDRA_KEYSPACE = 'my_keyspace'
Syntax for model definition is similar to Django's, but because rows can have as many columns as you want, there's no need to define them.
import pycassa
from alexandra import cass
class EventManager(cass.Manager):
def get_for_uuid(self, uuid):
return self.get(uuid)
class Event(cass.ColumnFamily):
"""
Event = {
"89c23f26377e439a8e52fadec8f6bf19" = {
"uuid": "804e39e29a6148039633e5a69f0c0870",
"action": "landing:home"
"ip_address": "127.0.0.1",
"gender": "1",
}
...
}
"""
objects = EventManager()
class Meta:
# defaults to pycassa.ConsistencyLevel.ONE
read_consistency_level = pycassa.ConsistencyLevel.ONE
# defaults to pycassa.ConsistencyLevel.ONE
write_consistency_level = pycassa.ConsistencyLevel.QUORUM
# defaults to settings.CASSANDRA_KEYSPACE
keyspace = 'another_keyspace'
# defaults to False. Set to True if this is a super column family
super_cf = False
def save(self, *args, **kwargs):
super(Event, self).save(*args, **kwargs)
TrackingUUID.objects.add_event(self['uuid'], self.pk)
Queries use the pycassa query api, along with whatever other methods you want to define in your manager.
import uuid event = Event() event['uuid'] = "804e39e29a6148039633e5a69f0c0870" event['action'] = 'landing: home' event['gender'] = "1" event.pk = uuid.uuid4().hex event.save() # or you could do this event = Event(uuid="804e39e29a6148039633e5a69f0c0870", action='landing: home', gender='1') Event.objects.insert(uuid.uuid4().hex, event)