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.

Reply via email to