[pyar] Herencia en SQLAlchemy

Tomas Zulberti tzulberti en gmail.com
Mie Jul 30 08:16:03 ART 2014


Hola.

Por ahi se entendio mal la pregunta.

Simpre que hago:

>>> usuario = Usuario(...)
>>> db.session.add(usuario)
>>> db.session.commt()

Esto crea tambien un valor en la tabla de persona.

Ahora el problema que yo tengo es que el valor en la tabla de persona
ya esta creado, y quiero crear solo los valores en la tabla de
Usuario.

# Hace mucho tiempo
>>> persona = Persona(...)
>>> db.session.add(persona)
>>> db.session.commit()

# Ahora quiero crear los valores en la tabla de Usuario para esa persona
>>> usuario = "NO SE COMO HACERLO..."
>>> db.session.add(usuario)
>>> db.session.commt()

Muchas gracias,
TZ

2014-07-29 14:41 GMT-03:00 Mariano Mara <mariano.mara en gmail.com>:
>
> 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.
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar


More information about the pyar mailing list