On Sat, Jan 8, 2011 at 7:59 PM, Petra Clementson <petraclement...@gmail.com>wrote:
> > > On Sat, Jan 8, 2011 at 10:38 AM, Michael Bayer > <mike...@zzzcomputing.com>wrote: > >> >> On Jan 8, 2011, at 3:23 PM, Petra Clementson wrote: >> >> > I want to do a self join on combined but it wont let me. Essensially, >> > I want to join two different tables, and create aliases so I can >> > compare one column and make sure that each item in the column is >> > uniqe. If there are duplicates, I want my piece of code to show the >> > duplicates. Combining join with alias seems like the best way to do >> > this because when using other methods, if I change the duplicates to a >> > unique name, the name that used to be a duplicate still prints. Note >> > that the Header table has a foreign key reference to DiskFile and the >> > sql version used was 0.6.5. This is the portion of code where I am >> > getting an error: >> > >> > >> > combined = join(DiskFile, Header) >> > combined_alias = aliased(combined) >> > >> > >> > ERROR: >> > Traceback (most recent call last): >> > File "duplicatedl.py", line 32, in <module> >> > combined_1 = aliased(combined) >> > >> > File "/opt/sqlalchemy/lib/python2.5/site-packages/sqlalchemy/orm/ >> > util.py", line >> > 304, in __init__ >> > self.__target = self.__mapper.class_ >> > AttributeError: 'SQLCompiler' object has no attribute 'class_' >> >> This could perhaps be improved in the interface; "aliased()" applies to >> mapped classes and mappers. join() is a Selectable expression. To alias a >> selectable, use its alias() method to generate an alias object: >> >> join(A, B).alias() >> >> >> I'll think about having orm.aliased() detect a selectable and return >> selectable.alias() in 0.7. >> >> >> Thanks for your prompt reply! This looks like something I haven't tried > but would probably work. I'll have to try it on Monday and let you know how > it goes. > > > >> -- >> >> Okay, so I implemented "join(A, B).alias()", but I can't seem to access the columns of the aliased table. Here is my code: session = sessionfactory() combined_1 = join(DiskFile, Header).alias() combined_2 = join(DiskFile, Header).alias() query = session.query(header).select_from(combined_1, combined_2).filter(DiskFile.canonical == True).filter(Header.datalab != 'none').filter(combined_1.datalab == combined_2.datalab) And I get: AttributeError: 'Alias' object has no attribute 'datalab' Any ideas? -- 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.