Transactions¶
Savepoints¶
The SAVEPOINT statement sets a named transaction allowing parts of a transaction to be rolled back before COMMIT.
Get the collection object¶
Assuming the existence of test_schema.test_collection collection.
[{
"_id": 1,
"name": "Fred",
"age": 21
}]
Get the collection object.
session = mysqlx.get_session("root:@localhost:33060")
schema = session.get_schema("test_schema")
collection = schema.get_collection("test_collection")
Set and rollback to a named transaction savepoint¶
A savepoint name can be provided to create a transaction savepoint, which can later be used to rollback.
A mysqlx.OperationalError will be raised if the savepoint name is an invalid string or if a nonexistent savepoint is being used in mysqlx.Session.rollback_to().
# Start transaction
session.start_transaction()
collection.add({"name": "Wilma", "age": 33}).execute()
assert(2 == collection.count())
# Create a savepoint
session.set_savepoint("sp")
collection.add({"name": "Barney", "age": 42}).execute()
assert(3 == collection.count())
# Rollback to a savepoint
session.rollback_to("sp")
assert(2 == collection.count())
# Commit all operations
session.commit()
Set and rollback to an unnamed transaction savepoint¶
If a savepoint name is not provided, mysqlx.Session.release_savepoint() will return a generated savepoint name.
# Start transaction
session.start_transaction()
collection.add({"name": "Wilma", "age": 33}).execute()
assert(2 == collection.count())
# Create a savepoint
savepoint = session.set_savepoint()
collection.add({"name": "Barney", "age": 42}).execute()
assert(3 == collection.count())
# Rollback to a savepoint
session.rollback_to(savepoint)
assert(2 == collection.count())
# Commit all operations
session.commit()
Releasing a transaction savepoint¶
A mysqlx.OperationalError will be raised if a nonexistent savepoint is being used in mysqlx.Session.release_savepoint().
# Start transaction
session.start_transaction()
collection.add({"name": "Wilma", "age": 33}).execute()
assert(2 == collection.count())
# Create a savepoint
session.set_savepoint("sp")
collection.add({"name": "Barney", "age": 42}).execute()
assert(3 == collection.count())
# Release a savepoint
session.release_savepoint("sp")
assert(3 == collection.count())
# Commit all operations
session.commit()