MCPcopy Index your code
hub / github.com/apache/cassandra-python-driver / prepare

Method prepare

cassandra/cluster.py:3141–3205  ·  view source on GitHub ↗

Prepares a query string, returning a :class:`~cassandra.query.PreparedStatement` instance which can be used as follows:: >>> session = cluster.connect("mykeyspace") >>> query = "INSERT INTO users (id, name, age) VALUES (?, ?, ?)" >>> prepared = s

(self, query, custom_payload=None, keyspace=None)

Source from the content-addressed store, hash-verified

3139 fn(response_future, *args, **kwargs)
3140
3141 def prepare(self, query, custom_payload=None, keyspace=None):
3142 """
3143 Prepares a query string, returning a :class:`~cassandra.query.PreparedStatement`
3144 instance which can be used as follows::
3145
3146 >>> session = cluster.connect("mykeyspace")
3147 >>> query = "INSERT INTO users (id, name, age) VALUES (?, ?, ?)"
3148 >>> prepared = session.prepare(query)
3149 >>> session.execute(prepared, (user.id, user.name, user.age))
3150
3151 Or you may bind values to the prepared statement ahead of time::
3152
3153 >>> prepared = session.prepare(query)
3154 >>> bound_stmt = prepared.bind((user.id, user.name, user.age))
3155 >>> session.execute(bound_stmt)
3156
3157 Of course, prepared statements may (and should) be reused::
3158
3159 >>> prepared = session.prepare(query)
3160 >>> for user in users:
3161 ... bound = prepared.bind((user.id, user.name, user.age))
3162 ... session.execute(bound)
3163
3164 Alternatively, if :attr:`~.Cluster.protocol_version` is 5 or higher
3165 (requires Cassandra 4.0+), the keyspace can be specified as a
3166 parameter. This will allow you to avoid specifying the keyspace in the
3167 query without specifying a keyspace in :meth:`~.Cluster.connect`. It
3168 even will let you prepare and use statements against a keyspace other
3169 than the one originally specified on connection:
3170
3171 >>> analyticskeyspace_prepared = session.prepare(
3172 ... "INSERT INTO user_activity id, last_activity VALUES (?, ?)",
3173 ... keyspace="analyticskeyspace") # note the different keyspace
3174
3175 **Important**: PreparedStatements should be prepared only once.
3176 Preparing the same query more than once will likely affect performance.
3177
3178 `custom_payload` is a key value map to be passed along with the prepare
3179 message. See :ref:`custom_payload`.
3180 """
3181 message = PrepareMessage(query=query, keyspace=keyspace)
3182 future = ResponseFuture(self, message, query=None, timeout=self.default_timeout)
3183 try:
3184 future.send_request()
3185 response = future.result().one()
3186 except Exception:
3187 log.exception("Error preparing query:")
3188 raise
3189
3190 prepared_keyspace = keyspace if keyspace else None
3191 prepared_statement = PreparedStatement.from_message(
3192 response.query_id, response.bind_metadata, response.pk_indexes, self.cluster.metadata, query, prepared_keyspace,
3193 self._protocol_version, response.column_metadata, response.result_metadata_id, self.cluster.column_encryption_policy)
3194 prepared_statement.custom_payload = future.custom_payload
3195
3196 self.cluster.add_prepared(response.query_id, prepared_statement)
3197
3198 if self.cluster.prepare_on_all_hosts:

Callers 15

mainFunction · 0.80
_queryMethod · 0.80
test_wide_rowsMethod · 0.80
test_wide_byte_rowsMethod · 0.80
setUpClassMethod · 0.80
test_queryMethod · 0.80
test_routing_keyMethod · 0.80

Calls 8

send_requestMethod · 0.95
resultMethod · 0.95
prepare_on_all_hostsMethod · 0.95
PrepareMessageClass · 0.90
ResponseFutureClass · 0.85
oneMethod · 0.80
from_messageMethod · 0.80
add_preparedMethod · 0.80