somehow you have the User class getting stuck in as a column somewhere...it is probably a subtle mistake in your syntax somewhere (and of course the lack of static typing in python :) ) I tried cutting and pasting all the code youve put here and it compiles fine...so youll have to create a more reproducible test case.
On Sep 16, 2006, at 8:18 PM, Mongoose wrote: > I'm having trouble compiling my mappers. What I'm doing is a sort > of image board thingy, and trying to model it via sqlalchemy. I'm > using postgresql. My database is like this: > > (page down for the rest of my question) > > -------------------8<---------------------------------------------- > users = Table('users', metadata, > Column('id',Integer,primary_key=True), > Column('uname',String(16),unique=True), > Column('nym',String(32)), > Column('description',TEXT), > Column('interests', TEXT), > Column('password', Binary), > Column('link', TEXT), > Column('picture', TEXT), > Column('ContactInfo', TEXT), > Column('email',TEXT), > Column('PageSize',Integer,PassiveDefault('50')), > Column('visited',DateTime), > schema='identity' > ) > > posts = Table('posts',metadata, > Column('id',Integer,primary_key=True), > Column('parent',Integer,ForeignKey > ('chan.posts.id'),index=True), > Column('subject',String(128)), > Column('message',TEXT), > Column('created',DateTime), > Column('ChildAdded',DateTime), > Column('frozen',Boolean,PassiveDefault('0')), > Column('link',TEXT), > Column('image',PickleType), > Column('artist',TEXT), > Column('poster',Integer,ForeignKey > ('identity.users.id'),nullable=False), > schema='chan') > > channels = Table('channels',metadata, > Column('name',String(128),primary_key=True), > Column('top',Integer, ForeignKey('posts.id')), > Column('description',TEXT), > schema='chan') > > seen = Table('seen',metadata, > Column('uid',Integer,ForeignKey > ('identity.users.id'),primary_key=True), > Column('post',Integer,ForeignKey('chan.posts.id')), > schema='chan') > > blablah...create(...) > -------------------8<---------------------------------------------- > > It's an overcomplicated setup I admit, but the database seems to > swallow all that stuff pretty smoothly during creation. The > problem comes when I try to do a simple mapping to one of the > types. It seems like an intermittent error that always seems to hit > one of the types. I can't detect any rhyme or reason, sadly. What > I'll do is something like this: > > -------------------8<---------------------------------------------- > class User(object): > def _get_password(...): > ... > return self._password_hash > def set_password(...): > ... > password = property(_get_password,set_password > > ... > > table = Table('users',metadata,autoload=True,schema='identity') > usermap = mapper(User,table,properties={ > '_password_hash': table.c.password > }) > table = Table('posts',metadata,...schema='chan') > postmap = mapper(Post,...) > etc... > usermap.compile() > -------------------8<---------------------------------------------- > > At that point, everything goes all to Hell. Not literally of > course. I get errors like: > File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line > 712, in corresponding_column > for c in column.orig_set: > AttributeError: type object 'User' has no attribute 'orig_set' > > or: > File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line > 712, in corresponding_column > for c in column.orig_set: > AttributeError: type object 'Post' has no attribute 'orig_set' > > ...during that usermap.compile() stage. Is there any reason that > User wouldn't be construed as a ColumnElement? Is there any reason > the framework would mistakenly think User to be a ColumnElement > when it shouldn't? Is there any reason those errors should come > up, then disappear, leaving other mysterious errors ("SQL Invalid > syntax, at FROM"???) to boggle my brain? > > The specific code for the mapping is...here: > http://synx.us.to/code/fib/channel/handler.py > Do a text search for the 'Mappers' class. Each type has its own > @classmethod called 'mapper' which I then call so that I can > closely couple the properties={} clause with the class itself. So > respectively there are 4 functions that all call sqlalchemy.mapper > (or as I put it, db.mapper) > 3 in here: > http://synx.us.to/code/fib/channel/__init__.py > And 1 in here: > http://synx.us.to/code/fib/identity/user.py > Again, do a text search for 'mapper' in those files to find the > mapper functions. > > Is there a problem with me using the cls variable in the > classmethod to map? Would that mean a later query somewhere else > like session.query(user.User) would not work because it's not > 'cls'? Is it a problem if I pass the sqlalchemy module as an > argument, instead of importing it explicitly in each of the 4 > files? Why would the compile() stage fail, in any case? > -- > Mongoose > jabber: http://synx.us.to/jabber.png > > ---------------------------------------------------------------------- > --- > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your > job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Sqlalchemy-users mailing list > Sqlalchemy-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Sqlalchemy-users mailing list Sqlalchemy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users