Skip to content

Instantly share code, notes, and snippets.

@sonthonaxrk
Created April 3, 2022 09:26
Show Gist options
  • Save sonthonaxrk/5c330515e9379014053911ab26b58509 to your computer and use it in GitHub Desktop.
Save sonthonaxrk/5c330515e9379014053911ab26b58509 to your computer and use it in GitHub Desktop.
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import (declarative_base, declared_attr,
AbstractConcreteBase)
engine = create_engine('sqlite://', echo=True)
Base = declarative_base()
Base.metadata = MetaData()
class CommonMetadata(Base):
__tablename__ = 'metadata'
@declared_attr
def id(cls):
return Column(
Integer,
primary_key=True,
)
data = Column(Text)
class Product(AbstractConcreteBase, Base):
@declared_attr
def id(cls):
return Column(
Integer,
ForeignKey(
'metadata.id',
deferrable=True,
initially="DEFERRED",
),
primary_key=True,
)
class Electronics(Product):
__tablename__ = 'electronics'
clock_speed = Column(Numeric)
__mapper_args__ = {
'polymorphic_identity': 'electronics',
'concrete': True
}
class Clothing(Product):
__tablename__ = 'clothing'
__mapper_args__ = {
'polymorphic_identity': 'clothing',
'concrete': True
}
size = Column(Integer)
configure_mappers()
Base.metadata.create_all(engine)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment