also, I wonder how the way you were doing it before, with composite, was actually working out ? It wasn't intended to hold "half" of a primary key like that which is probably why I warned against it, but if its working for you, there's no reason not to use it.
I.e. with declarative just put the Column objects inside the composite: class User(Base): __tablename__ = 'user' house_address_id = Column('house_address', Integer, ForeignKey('address.id')) office_address_id = Column('office_address', Integer, ForeignKey('address.id')) house_address = relation(Address, primaryjoin=house_address_id==Address.id) office_address = relation(Address, primaryjoin=office_address_id==Address.id) comp = composite(Comp, Column('id', Integer, primary_key=True, autoincrement=True), Column('name', CHAR)) On Nov 4, 2008, at 7:29 PM, Ritesh Nadhani wrote: > Unfortunately, it still gives me an error. > > http://paste.pocoo.org/show/90191 > > Did I miss something? > > PS: I added the __get__ method just for the fun of it, I have no > idea what it does. Looking at the docs: > http://www.sqlalchemy.org/docs/04/sqlalchemy_orm_interfaces.html#docstrings_sqlalchemy.orm.interfaces_PropComparator > > , seems that I have to implement other methods but I am not sure > which one. > > Any help is appreciated. > > On Mon, Oct 27, 2008 at 7:45 AM, Michael Bayer <[EMAIL PROTECTED] > > wrote: > > theres a "bug" in that the error message is misleading, but in fact a > composite property owns the columns within it which cannot be mapped > separately, so to make that "work" you'd need to say: > > class User(Base): > > __tablename__ = 'user' > > house_address_id = Column('house_address', Integer, > ForeignKey('address.id')) > office_address_id = Column('office_address', Integer, > ForeignKey('address.id')) > house_address = relation(Address, > primaryjoin=house_address_id==Address.id) > office_address = relation(Address, > primaryjoin=office_address_id==Address.id) > comp = composite(Comp, Column('id', Integer, primary_key=True, > autoincrement=True), Column('name', CHAR)) > > but the way you're using Comp isn't going to work in any case; you're > actually looking for comparable_property() here: > > class MyComparator(sqlalchemy.orm.interfaces.PropComparator): > def __eq__(self, other): > return self.comp == other.comp > > class User(Base): > > __tablename__ = 'user' > > id = Column('id', Integer, primary_key=True, autoincrement=True) > name = Column('name', CHAR) > house_address_id = Column('house_address', Integer, > ForeignKey('address.id')) > office_address_id = Column('office_address', Integer, > ForeignKey('address.id')) > house_address = relation(Address, > primaryjoin=house_address_id==Address.id) > office_address = relation(Address, > primaryjoin=office_address_id==Address.id) > > @property > def comp(self): > return self.id + self.name > > comp = comparable_property(MyComparator) > > > On Oct 27, 2008, at 9:22 AM, riteshn wrote: > > > > > Hello all > > > > New to SQLAlchemy and ORM and loving it. I am trying to use the > > declarative base extension with composite column. > > > > I have two very simple tables - user and address. > > > > My code at: http://python.pastebin.com/m6e032164 works without any > > problem. > > > > I am trying to put the same thing using declarative base: > > http://python.pastebin.com/m1a05e5c0 and it throws me the error. > > > > Any ideas? > > > > > > > > > > > > -- > Ritesh > http://www.riteshn.com > > > --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---