Django Cassandra Engine - Advanced Usage#
Cassandra as secondary database#
Sometimes you want to use cassandra database along with your relational database.
This is also possible! Just define your DATABASES
like below:
from cassandra import ConsistencyLevel
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'cassandra': {
'ENGINE': 'django_cassandra_engine',
'NAME': 'db',
'USER': 'user',
'PASSWORD': 'pass',
'TEST_NAME': 'test_db',
'HOST': '127.0.0.1',
'OPTIONS': {
'replication': {
'strategy_class': 'SimpleStrategy',
'replication_factor': 1
},
'connection': {
'consistency': ConsistencyLevel.LOCAL_ONE,
'retry_connect': True
# + All connection options for cassandra.cluster.Cluster()
},
'session': {
'default_timeout': 10,
'default_fetch_size': 10000
# + All options for cassandra.cluster.Session()
}
}
}
}
Then run ./manage.py syncdb
for your regular database and
./manage.py sync_cassandra
or ./manage.py syncdb --database cassandra
for Cassandra DB.
All cassandra.cluster.Cluster
and cassandra.cluster.Session
options are well described
here
.
Using internal authorization#
If you want to use
internal authorization
just provide USER
and PASSWORD
in cassandra's database alias.
...
'cassandra' {
'ENGINE': 'django_cassandra_engine',
'NAME': 'db',
'USER': 'user',
'PASSWORD': 'pass'
}
You can also pass custom
auth_provider
to connection
dict:
...
'connection': {
'consistency': ConsistencyLevel.LOCAL_ONE,
'retry_connect': True,
'port': 9042,
'auth_provider': PlainTextAuthProvider(username='user', password='password')
# + All connection options for cassandra.cluster.Cluster()
}
Performing raw database queries#
You might need to perform queries that don't map cleanly to models,
or directly execute UPDATE
, INSERT
, or DELETE
queries.
In these cases, you can always access the database directly, routing around the model layer entirely:
from django.db import connection
cursor = connection.cursor()
result = cursor.execute("SELECT COUNT(*) FROM users")
print result[0]['count']
That was easy! Show me some useful management commands now.