Re: [sqlalchemy] Class defining time significance

2010-07-08 Thread Michael Bayer

On Jul 7, 2010, at 10:52 PM, Craig Macomber wrote:

> '''
> For some reason, when I define my class seems to impact sqlalchemy
> Below is code where if the "class Formation(Library): pass" line is
> moved down,
> it works, but as is, I get the error at the end of this file, raised
> when the last line runs
> This seems very odd (and bug like) to me, and I'm searching for an
> explanation, as well as a way to avoid the problem
> other than carefully shuffling the order of my code around (which can
> be impossible in a larger project)
> I'm very new to sqlalchemy, so its likely I'm missing something
> conceptually;
> but I don't know where to look for docs about such an issue.
> This is the minimized version of my project messily crammed into a
> single file.
> Any insight would be greatly appreciated.

you have to map all classes that you intend to use with the Session.  The bug 
here is that you've managed to sneak past the usual assertions that classes 
passed in are mapped.  Ticket #1846 has been added.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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.



[sqlalchemy] Class defining time significance

2010-07-08 Thread Craig Macomber
'''
For some reason, when I define my class seems to impact sqlalchemy
Below is code where if the "class Formation(Library): pass" line is
moved down,
it works, but as is, I get the error at the end of this file, raised
when the last line runs
This seems very odd (and bug like) to me, and I'm searching for an
explanation, as well as a way to avoid the problem
other than carefully shuffling the order of my code around (which can
be impossible in a larger project)
I'm very new to sqlalchemy, so its likely I'm missing something
conceptually;
but I don't know where to look for docs about such an issue.
This is the minimized version of my project messily crammed into a
single file.
Any insight would be greatly appreciated.

Thanks,
-Craig

sqlalchemy 0.6.1 Mac osx 10.5.8, python 2.6.5, intel CPU
'''

from sqlalchemy import create_engine
engine = create_engine('sqlite:///test.db', echo=False)
from sqlalchemy import Table, Column, Integer, String, MetaData,
ForeignKey
from sqlalchemy.orm import mapper, relation, create_session,
sessionmaker

metadata = MetaData()
tree_table = Table('tree', metadata,
Column('id', Integer, primary_key=True),
Column('parent_id', Integer, ForeignKey('tree.id')),
Column('name', String),
Column('type', String(30), nullable=False),
)

class Tree(object):
def __init__(self):self.children=[]
class Library(Tree): pass

lib = Table("Library", metadata,Column('tree_id', Integer,
ForeignKey('tree.id'), primary_key=True))

metadata.create_all(engine)

mapper(Tree, tree_table, polymorphic_on=tree_table.c.type,
polymorphic_identity='Tree',
properties={'children':relation(Tree, cascade="all")})


# Crash position
class Formation(Library): pass

mapper(Library, lib, inherits=Tree, polymorphic_identity='Library')

 No Crash position
# class Formation(Library): pass


masterLib=Library()
sessionmaker(bind=engine)().add(masterLib)

masterLib.children.append(Formation())


'''
Traceback (most recent call last):
  File "main.py", line 38, in 
masterLib.children.append(x())
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/collections.py", line 930, in
append
item = __set(self, item, _sa_initiator)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/collections.py", line 905, in
__set
item = getattr(executor, 'fire_append_event')(item, _sa_initiator)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/collections.py", line 596, in
fire_append_event
item, initiator)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/attributes.py", line 662, in
fire_append_event
value = ext.append(state, value, initiator or self)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/unitofwork.py", line 40, in
append
sess.add(item)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/session.py", line 1058, in add
self._save_or_update_state(state)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/session.py", line 1068, in
_save_or_update_state
self._cascade_save_or_update(state)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/session.py", line 1072, in
_cascade_save_or_update
'save-update', state, halt_on=self.__contains__):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/session.py", line 1556, in
_cascade_unknown_state_iterator
for (o, m) in mapper.cascade_iterator(cascade, state, **kwargs):
AttributeError: 'NoneType' object has no attribute 'cascade_iterator'
'''

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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.