use a quoted expression that isn't evaluated until mapper configuration time:
parent = relationship("Test", remote_side="Test.id")
On Feb 7, 2013, at 3:51 PM, [email protected] wrote:
> How does one define a self-referential relationship when using
> declarative objects and reflection? Based on
>
> http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#adjacency-list-relationships
> I wrote the code below but when I run it I get an exception when
> the session.query() line is executed:
>
> [...many frames elided...]
> File "/usr/local/lib/python3.3/site-packages/sqlalchemy/sql/expression.py",
> line 1551, in _only_column_elements
> "'%s'; got: '%s', type %s" % (name, element, type(element)))
> sqlalchemy.exc.ArgumentError: Column-based expression object expected for
> argument 'remote_side'; got: '<built-in function id>', type <class
> 'builtin_function_or_method'>
>
> Code:
> ----------------
> import sqlalchemy as sa, sqlalchemy.orm, sqlalchemy.ext,
> sqlalchemy.ext.declarative
> Base = sa.ext.declarative.declarative_base
> (cls=sa.ext.declarative.DeferredReflection)
>
> class Test (Base):
> __tablename__ = 'test'
> parentobj = sa.orm.relationship ('Test', remote_side=[id])
>
> connectstr = 'postgres://postgres@localhost/test6603976'
> engine = sa.create_engine (connectstr)
> connection = engine.connect()
> meta = sa.MetaData()
> meta.reflect (bind=engine)
> Base.prepare (engine)
> session = sa.orm.sessionmaker (bind=engine)()
> session.query(Test).order_by(Test.id).all()
> ----------------
>
> Database (postgresql):
> CREATE TABLE test (
> id INT PRIMARY KEY,
> parent INT REFERENCES test(id));
> INSERT INTO test VALUES (1, NULL),(2,1);
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.