That worked. My problem is I was using Base.classes.hosts and not the class Hosts.
On Tue, Aug 30, 2016 at 1:39 AM, Simon King <si...@simonking.org.uk> wrote: > Which line is triggering that error? > > Here's a working example: > > import sqlalchemy as sa > import sqlalchemy.orm as saorm > from sqlalchemy.ext.automap import automap_base > > Base = automap_base() > > > class Host(Base): > __tablename__ = 'hosts' > > _mac_address = sa.Column('mac_address', sa.Integer) > > @property > def mac_address(self): > return '%012x' % self._mac_address > > @mac_address.setter > def mac_address(self, value): > self._mac_address = int(value, 16) > > > def main(): > engine = sa.create_engine('sqlite://') > > engine.execute(""" > CREATE TABLE hosts( > id INTEGER PRIMARY KEY, > mac_address INTEGER > ) > """) > > Base.prepare(engine, reflect=True) > > session = saorm.sessionmaker(bind=engine)() > > host = Host(mac_address='001122334455') > session.add(host) > session.commit() > > host = session.query(Host).one() > print host.mac_address > print host._mac_address > > if __name__ == '__main__': > main() > > > On Tue, Aug 30, 2016 at 12:09 AM, Robert Minsk <rmi...@gmail.com> wrote: > > When I try to do that I get > > > > File > > "/home/CORP/robert.minsk/venvs/lfw/lib/python2.7/site- > packages/sqlalchemy/util/_collections.py", > > line 212, in __getattr__ > > > > raise AttributeError(key) > > > > AttributeError: hosts > > > > > > On Fri, Aug 26, 2016 at 1:33 AM, Simon King <si...@simonking.org.uk> > wrote: > >> > >> On Fri, Aug 26, 2016 at 2:24 AM, Robert Minsk <rmi...@gmail.com> wrote: > >> > I am using automap_base to reflect a table. > >> > > >> > metadata = MetaData() > >> > metadata.reflect(bind=engine, only=['hosts']) > >> > automap = automap_base(metadata=metadata) > >> > automap.prepare() > >> > > >> > Hosts = automap.classes.hosts > >> > > >> > The mac_address column in Hosts is binary and would like to to > replace > >> > the > >> > mac_address with some sort of getter/setter to decode/encode the > >> > address. I > >> > have not found an example of doing this with an automapped table. Is > >> > there > >> > a easy way to do this? > >> > >> You can override specific columns on an automapped table by > >> pre-declaring the class: > >> > >> > >> http://docs.sqlalchemy.org/en/latest/orm/extensions/automap. > html#specifying-classes-explicitly > >> > >> I haven't tried it, but I would assume that you can use any of the > >> normal facilities for modifying column behaviour at that point. For > >> example, I think you could do something like this: > >> > >> class Hosts(automap): > >> __tablename__ = 'hosts' > >> _mac_address = Column('mac_address', BINARY) > >> @property > >> def mac_address(self): > >> return decode_mac_address(self._mac_address) > >> > >> @mac_address.setter > >> def mac_address(self, value): > >> self._mac_address = encode_mac_address(value) > >> > >> If you want to be able to query using the decoded values, you could > >> also try hybrid properties. > >> > >> Hope that helps, > >> > >> Simon > >> > >> -- > >> You received this message because you are subscribed to a topic in the > >> Google Groups "sqlalchemy" group. > >> To unsubscribe from this topic, visit > >> https://groups.google.com/d/topic/sqlalchemy/uxto-cNocFw/unsubscribe. > >> To unsubscribe from this group and all its topics, send an email to > >> sqlalchemy+unsubscr...@googlegroups.com. > >> To post to this group, send email to sqlalchemy@googlegroups.com. > >> Visit this group at https://groups.google.com/group/sqlalchemy. > >> For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sqlalchemy+unsubscr...@googlegroups.com. > > To post to this group, send email to sqlalchemy@googlegroups.com. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/sqlalchemy/uxto-cNocFw/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.