[pyar] Herencia en SQLAlchemy

Mariano Mara mariano.mara en gmail.com
Mar Jul 29 14:41:23 ART 2014


2014-07-29 14:32 GMT-03:00 Tomas Zulberti <tzulberti en gmail.com>:

> Hola.
>
> Tengo dos modelos en SQLAlchemy:
>
> - Persona
> - Usuario
>
> Donde quiero que Usuario extienda de Persona. El tema es que a
> diferencia de los ejemplos de SQLAlchemy, la clase base Persona tiene
> sentido sola. Es decir, existe un registro de varias personas, y para
> alguna de ellas se crea el registro de Usuario.
>
> Los modelos son algo asi:
>
> class Persona(db.Model):
>      __mapper_args__ = {'polymorphic_on': 'person_type'}
>      id = db.Column(db.Integer, nullable=False, primary_key=True)
>      email = db.Column(db.String(1024), nullable=False)
>      person_type = db.Column(db.String(20), nullable=False)
>
>
>
> class Usuario(Persona):
>      __mapper_args__ = {'polymorphic_identity': 'usuario'}
>      id = db.Column(db.Integer, db.ForeignKey('persona.id'),
> primary_key=True, nullable=False)
>      password = db.Column(db.String(1024), nullable=False)
>
>
> El problema es que quiero poder hacer algo como esto y no encuentro la
> forma:
>
> >>> p = Person(email='pepe en gmail.com')
> >>> db.session.add(p)
> >>> db.session.commit()
> >>> print p.id
> 3
> >>> u = Usuario(id=3, password='UN HASH')
> >>> db.session.add(u)
> >>> db.session.commit()
> (IntegrityError) null value in column "email" violates not-null constraint
> 'INSERT INTO persona (id, name,
>
> Es decir, esta intentando de insertar una persona cuando yo lo unico
> que quiero que cree es el valor de una persona
>
>
> No uses Single Table inheritance, usá una joined table y pone los
atributos que sean excluyentes de cada clase en su table particular (por
ejemplo el mail que es excluyente para Personas y no para usuarios). De
otra forma el nullable del email te lo va a exigir siempre porque es una
constraint a nivel de modelo de datos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140729/4b00e529/attachment.html>


More information about the pyar mailing list