On Jul 7, 8:56 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
> On Jul 7, 2010, at 1:30 AM, Lance Edgar wrote:
>
>
>
> > Hi, I was wondering what method might be used (assuming it's possible)
> > to redefine a column's attribute type after the mapping has already
> > been made?  Specifically I have the following scenario:
>
> > from sqlalchemy import *
> > from sqlalchemy.orm import mapper
>
> > metadata = MetaData()
>
> > orders = Table(
> >        "orders", metadata,
> >        Column(id, Integer, primary_key=True),
> >        Column(quantity, Numeric(8,3)),
> >        )
>
> > class Order(object):
> >        pass
>
> > mapper(Order, orders)
>
> > # ... then later ...
>
> > from sqlalchemy.orm import class_mapper
>
> > class_mapper(Order).get_property('quantity').update_to_integer_type()
>
> > Obviously that last method doesn't exist, but I would like something
> > along those lines.  Basically I want to type-cast the column at the
> > ORM layer instead of everywhere it appears in the UI.  I can't just
> > pass Integer to the Column definition because that's happening
> > elsewhere in another package.  Thanks in advance for any suggestions.
>
> map it as column_property(cast(table.c.column, Integer)).

Michael, thanks for the tip.  I still found this somewhat confusing
though:

When my code runs, the mapper has already been created (and
"compiled", I assume).  So what I ended up doing, that seemed to work,
is:

class_mapper(Order).add_property('quantity',
column_property(cast(orders.c.quantity, Integer)))

The thing is, the mapper *already* had a "quantity" property so
without knowing the internals of that business I can only assume that
my .add_property() call doesn't have weird side effects (although it
does accomplish what I'm after).  The mapper exposes .get_property()
and .iterate_properties(), and of course .add_property(), but I guess
I would have expected there to be a .set_property()
or .update_property().  Is this just a quirk in the wording or my
understanding, or am I still missing some important step?

Lance

-- 
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.

Reply via email to