Hi,
I am writing a turbogears2 application, with elixir. I got a problem
when I try to create an new entity and attach it to another entity. I
create a simple program to repruduce the problem:
from elixir import *
class User(Entity):
name = Field(Unicode)
site = OneToOne('Site', cascade="all, delete-orphan")
class Site(Entity):
user = ManyToOne('User')
title = Field(Unicode)
metadata.bind = 'sqlite:///'
setup_all(True)
# we do create a new user victor here
victor = User(name=u'victor')
session.commit()
# and we create a site for victor
coolSite = Site(user=victor, title=u'Cool site')
session.commit()
or it can be download here : http://utilitybase.com/paste/15927
this is the trace back
Traceback (most recent call last):
File "I:\workspace\radio\radiosite\new_website\radioweb\radioweb
\model\show_bug.py", line 25, in <module>
coolSite = Site(user=victor, title=u'Cool site')
File "c:\python25\lib\site-packages\Elixir-0.6.1-py2.5.egg\elixir
\entity.py", line 718, in __call__
return type.__call__(cls, *args, **kwargs)
File "<string>", line 4, in __init__
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 890, in initialize_instance
return manager.events.original_init(*mixed[1:], **kwargs)
File "c:\python25\lib\site-packages\Elixir-0.6.1-py2.5.egg\elixir
\entity.py", line 876, in __init__
self.set(**kwargs)
File "c:\python25\lib\site-packages\Elixir-0.6.1-py2.5.egg\elixir
\entity.py", line 880, in set
setattr(self, key, value)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 151, in __set__
self.impl.set(instance_state(instance), value, None)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 557, in set
value = self.fire_replace_event(state, value, old, initiator)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 577, in fire_replace_event
value = ext.set(state, value, previous, initiator or self)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 810, in set
new_state.get_impl(self.key).append(new_state, state.obj(),
initiator, passive=PASSIVE_NO_CALLABLES)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 387, in append
self.set(state, value, initiator)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 556, in set
old = self.get(state)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\attributes.py",
line 375, in get
value = callable_()
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\strategies.py",
line 589, in __call__
result = q.all()
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\query.py", line
1193, in all
return list(self)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\query.py", line
1286, in __iter__
self.session._autoflush()
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\session.py", line
899, in _autoflush
self.flush()
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\session.py", line
1351, in flush
self._flush(objects)
File "C:\Python25\Lib\site-packages\sqlalchemy\orm\session.py", line
1408, in _flush
mapperutil.state_str(state), path))
sqlalchemy.orm.exc.FlushError: Instance <Site at 0x10ad310> is an
unsaved, pending instance and is an orphan (is not attached to any
parent 'User' instance via that classes' 'site' attribute)
It is so strange, why it said that my site is a orphan? It seems that
there is something behind that method invoke autoflush, but at this
moment, the site is not attached to user yet, so here comes the
problem?
The version of sqlalchemy is 5.5, and the version of elixir is 0.6.1.
I don't understand, the user is already there in memory, what will
invoke a autoflush? Is that a bug of sqlalchemy?
It is an unreasonable behavior sqlalchemy did, it stop me from add any
site to my user. How can I solve this problem?
Thanks.
Victor Lin.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---