I'm trying to convert some classes from Elixir to declarative and am
running into a problem defining a simple self-referencing definition.
I've searched the archives and have tried several things but seem to
be missing something:

>>> import sqlalchemy
>>> sqlalchemy.__version__
'0.5.2'


>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>> from sqlalchemy.ext.declarative import declarative_base

>>> Base = declarative_base()

>>> class User(Base):
...     __tablename__ = "users"
...
...     id = Column(Integer, primary_key = True)
...     uid = Column(Unicode(15), unique = True)
...     modified_by_id = Column(Integer, ForeignKey("users.id"))
...     modified_by = relation("User", remote_side = [id])

>>> class Group(Base):
...     __tablename__ = "groups"
...
...     id = Column(Integer, primary_key = True)
...     gid = Column(Unicode(15), unique = True)
...     modified_by_id = Column(Integer, ForeignKey("users.id"))
...     modified_by = relation("User")
...     inactive = Column(Boolean, default=False)

>>> Base.metadata.bind = "sqlite:///:memory:"
>>> #Base.metadata.bind.echo = True
>>> Base.metadata.create_all()

>>> Session = sessionmaker()
>>> s = Session()

Create a user and group:

    >>> user = User(uid = u"user")
    >>> s.add(user)

    >>> group = Group(gid = u"group")
    >>> s.add(group)
    >>> s.commit()

The Group.modified_by relation works fine:

    >>> group.modified_by = user
    >>> s.commit()
    >>> group = s.query(Group).get(group.id)
    >>> print group.modified_by #doctest: +ELLIPSIS
    <__main__.User object at ...>

But setting the User.modified_by relation does not work:

    >>> user.modified_by = user
    >>> s.commit()
    >>> user = s.query(User).get(user.id)
    >>> print user.modified_by
    None

Setting the User.modified_by_id field directly does:

    >>> user.modified_by_id = user.id
    >>> s.commit()
    >>> user = s.query(User).get(user.id)
    >>> print user.modified_by #doctest: +ELLIPSIS
    <__main__.User object at ...>

What am I doing wrong?

Thanks in advance,


Shawn


--~--~---------~--~----~------------~-------~--~----~
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 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to