update tutorial remove datatypes create python inheritance sqlalchemy single-table-inheritance mapper

python - tutorial - sqlalchemy documentation



Se necesita un ejemplo de mapeador clásico para la herencia de tablas únicas de SqlAlchemy (1)

Mapear manualmente las jerarquías de herencia de clases es laborioso y no es algo que recomendaría, pero aquí va. Comience por definir su tabla. Desde el uso de herencia de tabla única, debe incluir todas las columnas requeridas:

metadata = MetaData() employee = Table( ''employee'', metadata, Column(''id'', Integer, primary_key=True), Column(''name'', String(50)), Column(''type'', String(20)), Column(''manager_data'', String(50)), Column(''engineer_info'', String(50)) )

Las clases simples de Python:

class Employee: def __init__(self, name): self.name = name class Manager(Employee): def __init__(self, name, manager_data): super().__init__(name) self.manager_data = manager_data class Engineer(Employee): def __init__(self, name, engineer_info): super().__init__(name) self.engineer_info = engineer_info

Y las asignaciones clásicas:

mapper(Employee, employee, polymorphic_on=employee.c.type, polymorphic_identity=''employee'', exclude_properties={''engineer_info'', ''manager_data''}) mapper(Manager, inherits=Employee, polymorphic_identity=''manager'', exclude_properties={''engineer_info''}) mapper(Engineer, inherits=Employee, polymorphic_identity=''engineer'', exclude_properties={''manager_data''})

Tenga en cuenta cómo debe limitar las propiedades mapeadas de forma manual en cada asignador, lo que será difícil de mantener con jerarquías más grandes. Al usar Declarative, todo lo que se maneja por usted.

Encontré un ejemplo de cómo hacer la herencia de una sola tabla usando mapeos de Clase.

http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#single-table-inheritance

Pero por mi vida, no puedo encontrar un ejemplo de cómo hacer esto con el mapeador clásico para poder mantener separadas mis clases y mapeos persistentes.

¿Cómo convierto este ejemplo en mapeo clásico? Tengo claro crear las tablas, pero no estoy seguro de cómo estructurar realmente el mapeador.

En el ejemplo, hay los siguientes tipos definidos:

class Employee(Base): class Manager(Employee): class Engineer(Employee):

Suponiendo que he creado la tabla adecuada:

employee = Table(...Column(type...))

¿Cómo escribo el código para el asignador para que tanto el Gerente como el Ingeniero vivan en la misma tabla (herencia de tabla única) discriminada por tipo ("gerente", "ingeniero" o empleado de otro modo)?

Gracias.