In this chapter, you will learn the different methods of mapping object-oriented inheritance to relational database tables. You will learn how to use different methods of inheritance mapping with SQLAlchemy, as well as how to use inheritance in the presence of mapped relations between classes.
No object-relational mapper would be complete without some method of mapping object-oriented inheritance hierarchies to SQL tables, and so SQLAlchemy provides rich support for modeling inheritance. Inheritance is typically modeled in SQL in one of three ways: single table inheritance, concrete table inheritance, or joined table inheritance.
For the purposes of illustrating SQLAlchemy’s support for the various types of inheritance modeling, we will use a simple inheritance hierarchy that models products, including clothing products and accessories. This hierarchy is illustrated in Figure 8-1 and is implemented by the following Python code:
class Product(object): def __init__(self, sku, msrp): self.sku = sku self.msrp = msrp def __repr__(self): return '<%s %s>' % ( self.__class__.__name__, self.sku) class Clothing(Product): def __init__(self, sku, msrp, clothing_info): Product.__init__(self, sku, msrp) self.clothing_info = clothing_info class Accessory(Product): def __init__(self, sku, msrp, accessory_info): Product.__init__(self, sku, msrp) self.accessory_info = accessory_info
Figure 8-1. Sample inheritance hierarchy