You define schema slightly different when using the SQLAlchemy ORM because it is focused around user-defined data objects instead of the schema of the underlying database. In SQLAlchemy Core, we created a metadata container and then declared a
Table object associated with that metadata. In SQLAlchemy ORM, we are going to define a class that inherits from a special base class called the
declarative_base combines a metadata container and a mapper that maps our class to a database table. It also maps instances of the class to records in that table if they have been saved. Let’s dig into defining tables in this manner.
A proper class for use with the ORM must do four things:
Inherit from the
__tablename__, which is the table name to be used in the database.
Contain one or more attributes that are
Ensure one or more attributes make up a primary key.
We need to examine the last two attribute-related requirements a bit closer.
First, defining columns in an ORM class is very similar to defining columns in a
Table object, which we discussed in Chapter 2; however, there is one very important difference. When defining columns in an ORM class, we don’t have to supply the column name as the first argument to the
Column constructor. Instead, the column name will be set to the name of the class attribute to which it is assigned. Everything ...