AFAIRemember, by default, relation assumes it is a collection, and not 
a reference - as it is in your case (padre means parent, right?)
give relation( ... use_list=False).

On Monday 14 July 2008 15:21:48 Marcos wrote:
> Hello!
> First, sorry about my english!
>
> I'm having this little problem, and i can't see where is my error.
> I have the follow code:
>
> <code>
> from sqlalchemy import *
> from sqlalchemy.orm import *
>
> class Cuenta(object):
>     def __init__(self, codigo, de_titulo, descripcion, padre):
>         self.codigo = codigo
>         self.de_titulo = de_titulo
>         self.descripcion = descripcion
>         self.padre = padre
>
> _metadata = MetaData()
>
> cuentas_tabla = Table('cuentas', _metadata,
>                       Column('id', Integer, primary_key=True),
>                       Column('codigo', String(30), unique=True,
> nullable=False),
>                       Column('de_titulo', Boolean, nullable=False),
>                       Column('descripcion', String(150),
> unique=True, nullable=False),
>                       Column('cuenta_padre', Integer,
> ForeignKey('cuentas.id'), nullable=True)
>                       )
> mapper(Cuenta, cuentas_tabla, properties={'padre':relation(Cuenta,
> backref='hijas')})
>
> engine = create_engine('sqlite:///database.txt')
> Session = sessionmaker(bind=engine, autoflush=True,
> transactional=False)
> _metadata.create_all(bind=engine)
> session = Session()
> session.begin()
> activo = Cuenta(codigo='1',
>                 de_titulo=True,
>                 descripcion='Activo',
>                 padre=None)
> fachadaPersistencia.save(activo)
> caja = Cuenta(codigo='1.1',
>               de_titulo = False,
>               descripcion='Caja',
>               padre=activo)
> fachadaPersistencia.save(caja)
> banco = Cuenta(codigo='1.2',
>               de_titulo = False,
>               descripcion='Banco',
>               padre=activo)
> fachadaPersistencia.save(banco)
> pasivo = Cuenta(codigo='2',
>                 de_titulo=True,
>                 descripcion='Pasivo',
>                 padre=None)
> session.save(pasivo)
> session.commit()
> </code>
>
> And i have the next exception:
> <code>
> Traceback (most recent call last):
>   File
> "/home/marcos/easyeclipse-python-1.2.2.2/workspace/mine/jContab/
> src/jContab/test.py", line 30, in ?
>     padre=None)
>   File
> "/usr/lib/python2.4/site-packages/SQLAlchemy-0.4.2-py2.4.egg/
> sqlalchemy/orm/attributes.py", line 1126, in init
>     oldinit(instance, *args, **kwargs)
>   File
> "/home/marcos/easyeclipse-python-1.2.2.2/workspace/mine/jContab/
> src/jContab/test.py", line 9, in __init__
>     self.padre = padre
>   File
> "/usr/lib/python2.4/site-packages/SQLAlchemy-0.4.2-py2.4.egg/
> sqlalchemy/orm/attributes.py", line 36, in __set__
>     self.impl.set(instance._state, value, None)
>   File
> "/usr/lib/python2.4/site-packages/SQLAlchemy-0.4.2-py2.4.egg/
> sqlalchemy/orm/attributes.py", line 532, in set
>     new_values = list(new_collection.adapt_like_to_iterable(value))
>   File
> "/usr/lib/python2.4/site-packages/SQLAlchemy-0.4.2-py2.4.egg/
> sqlalchemy/orm/collections.py", line 509, in adapt_like_to_iterable
> raise TypeError(
> TypeError: Incompatible collection type: NoneType is not list-like
> </code>
>
> If I quit the backref, i'm still having that error. If anybody can
> help me, i will appreciate that.
>
> Thanks,
>
> Marcos Alcazar
> Mendoza, Argentina

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to