Global init
import cassio
cassio.init(...)
The purpose of this statement is to set a globally-available
cassandra.cluster.Session
, together with a keyspace name,
as the default database connection for all subsequent CassIO instantiations. Once you have run init(...)
, you do not need to specify the DB anymore, e.g.
table = cassio.table.MetadataCassandraTable(table="my_table")
reader = cassio.db_reader.MultiTableCassandraReader(
field_mapper={"v": ("t", "c")},
admit_nulls=False,
)
Of course, you can still specify the parameters session
and/or keyspace
when creating the objects, in which case
the latter will take precedence (for example, you may set the Session through init
and then choose different keyspaces for various objects).
The init(...)
can be invoked in several ways -- some of which exemplified below; no matter what the call signature, the invocation results in a session and/or a keyspace being set as defaults.
Example signatures
You have a Session and a Keyspace prepared beforehand:
import cassandra
cluster = cassandra.cluster.Cluster(...)
session = cluster.connect()
cassio.init(session=session, keyspace="my_k")
You have the connection parameters to a Cassandra cluster:
cassio.init(
contact_points=['127.0.0.1'],
username='u',
password='p',
)
You have the credentials to an Astra DB instance:
cassio.init(database_id="abcd0123-...", token="AstraCS:...")
There are suitable environment variables available (e.g. CASSANDRA_CONTACT_POINTS
, or the combination ASTRA_DB_APPLICATION_TOKEN
plus ASTRA_DB_DATABASE_ID
):
cassio.init(auto=True)
For more, try help cassio.init
in a Python REPL.
Usage
Note that the global defaults thus set are consulted at constructor time by the various abstractions (e.g. the tables): so the following interaction, for example,
cassio.init(session=S1, keyspace=K1)
my_table = cassio.table.PlainCassandraTable(table="my_table")
cassio.init(session=S2, keyspace=K2)
table.put(row_id="x", body_blob="y")
does result in a table, with a row, in session S1
: my_table
will never be aware of the second init(...)
.
Accessing the session/keyspace
You can access the globally set DB connection at any time:
s = cassio.config.resolve_session()
k = cassio.config.resolve_keyspace()
These are an ordinary cassandra.cluster.Session
and an ordinary string
(unless, if not set yet, None
), which can be used e.g. to execute CQL
statements.
s.execute(f"DROP TABLE IF EXISTS {k}.table_name;")