Flask-CQLAlchemy handles connections to Cassandra clusters and gives a unified easier way to declare models and their columns
Now with support for abstract models and UserDefinedTypes
pip install flask-cqlalchemy
As such Flask-CQLAlchemy depends only on the cassandra-driver. It is assumed that you already have flask installed.
Flask-CQLAlchemy has been tested with all minor versions greater than 2.6 of cassandra-driver. All previous versions of Flask-CQLAlchemy are deprecated. All tests are run against the latest patch version. If you have problems using the plugin, try updating to the latest patch version of the minor version you are using.
#example_app.py
import uuid
from flask import Flask
from flask.ext.cqlalchemy import CQLAlchemy
app = Flask(__name__)
app.config['CASSANDRA_HOSTS'] = ['127.0.0.1']
app.config['CASSANDRA_KEYSPACE'] = "cqlengine"
db = CQLAlchemy(app)
class User(db.Model):
uid = db.columns.UUID(primary_key=True, default=uuid.uuid4)
username = db.columns.Text(required=False)
#example_app_udt.py
import uuid
from flask import Flask
from flask_cqlalchemy import CQLAlchemy
app = Flask(__name__)
app.config['CASSANDRA_HOSTS'] = ['127.0.0.1']
app.config['CASSANDRA_KEYSPACE'] = "cqlengine"
app.config['CASSANDRA_SETUP_KWARGS'] = {'protocol_version': 3}
db = CQLAlchemy(app)
class address(db.UserType):
street = db.columns.Text()
zipcode = db.columns.Integer()
class users(db.Model):
__keyspace__ = 'cqlengine'
name = db.columns.Text(primary_key=True)
addr = db.columns.UserDefinedType(address)
Start a python shell
>>>from example_app import db, User
>>>db.sync_db()
>>>user1 = User.create(username='John Doe')
>>>from example_app_udt import db, address, users
>>>db.sync_db()
>>>user_address = address(street="Easy St.", zipcode=99999
>>> user
users(name=u'Joe', addr=<example_app_udt.address object at 0x7f4498063310>)
>>> user.addr
<example_app_udt.address object at 0x7f4498063310>
>>> user.addr.street
u'Easy St.'
>>> user.addr.zipcode
99999
For a complete list of available methods refer to the cqlengine Model documentation
CQLAlchemy provides all the option available in the cqlengine connection.setup() method
CASSANDRA_HOSTS
- A list of hostsCASSANDRA_KEYSPACE
- The default keyspace to useCASSANDRA_CONSISTENCY
- The global default ConsistencyLevelCASSANDRA_LAZY_CONNECT
- True if should not connect until first useCASSANDRA_RETRY_CONNECT
- True if we should retry to connect even if there was a connection failure initiallyCASSANDRA_SETUP_KWARGS
- Pass-through keyword arguments for Cluster()
Flask CQLAlchemy supports User Defined Types, provided you are using Cassandra versions 2.1 or above. However Travis only provides 2.0.9 for testing and so this feature has not undergone rigorous testing.
Found a bug? Need a feature? Open it in issues, or even better, open a PR. Please include tests in the PR.