A set of operations such as addition, removal, or updating database entries is called a database transaction. A database session consists of one or more transactions. The act of committing ends a transaction by saving the transactions permanently to the database. In contrast, rollback rejects the pending transactions and changes are not permanently saved in the database.
In Flask-SQLAlchemy, a database is changed in the context of a session, which can be accessed as the
session attribute of the database instance. An entry is added to a session with the
add() method. The changes in a session are permanently written to a database when
.commit() is executed.
For example, we create new readers and would like to add them to our database:
Note that we didn’t specify the primary key
id value. Primary keys don’t have to be specified explicitly, and the values are automatically generated after the transaction is committed.
Adding each new entry to the database has the same pattern:
db.session.add(new_reader1) try: db.session.commit() except: db.session.rollback()
Notice that we surrounded
db.session.commit() with a try-except block. Why did we do that? If you look more carefully,
new_reader2 have the same e-mail, and when we declared the
Reader model, we made the e-mail column unique (see the app.py file). As a consequence, we want to undo the most recent addition to the transaction by using
db.session.rollback() and continue with other additions without interruption.
playground.py file, create a variable called
new_reader that is assigned an instance of the
Reader class with
name = “Peter”,
surname = “Johnson”, and
email =[email protected]. Do not add an assignment for
id will be automatically generated once the entry is added to the database)
In the “playground.py” file, using
session.add() add the
new_reader entry to the database.
In the “playground.py” file, commit the
new_reader object to the database. Enclose it using
except happens, perform the rollback.