Yes, but then my descriptor is washed away.  I'm trying to make it
like a column property on 'get' and a descriptor enabled property on
'set'.

On Mar 25, 3:27 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
> patrick wrote:
> > In the past I assigned
> > Matrix.text=column_property(select(["uncompress(compressed)"]),deferred=True)
> > I could probably write a little SqlSoup to do this select statement,
> > but is there a way I can integrate this all well?  The way I'm doing
> > this feels very sloppy.  SqlAlchemy is powerful, but can be very
> > complicated.
>
> you should map an attribute directly to
> column_property(uncompress(table.c.compressed)).   if you want it only to
> fire when you read it, use deferred() instead of column_property().
>
>
>
> > On Mar 5, 8:30 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> >> On Mar 5, 2010, at 6:44 PM, patrick wrote:
>
> >> > Well it's something between the two. The instance variable
> >> > "compressed" will always be NULL when adding or updating an instance,
> >> > but I want it to infer a value from another instance variable. When
> >> > inserting... the value of 'compressed' in the sql statement needs to
> >> > be the raw SQL string "COMPRESS('%s')" % instance.text. It isn't
> >> > simply running it through a function... it's dynamically creating the
> >> > column value from the object's instance variables upon insert or
> >> > update. MySQL has some funky compression function so the insert value
> >> > for the column has to be raw sql.
>
> >> so do a before_insert() mapper extension and set the attribute as needed
> >> to "func.compressed(instance.text)". Or do the same at the object
> >> level, i.e user sets myobject.foo, "foo" is a descriptor-enabled method
> >> which then sets myobject.bar = func.compressed(foo) or whatever.
>
> >> the technique here
> >> ishttp://www.sqlalchemy.org/docs/session.html#embedding-sql-insert-upda....
>
> >> > On Mar 4, 3:30 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
> >> >> patrick wrote:
> >> >>> Hey,
> >> >>> I'm trying to create dynamic defaults for columns ala "http://
> >> >>>www.sqlalchemy.org/docs/metadata.html#context-sensitive-default-funct...".
> >> >>> MySQL has COMPRESS and UNCOMPRESS functions that I'm trying to
> >> >>> leverage. I don't want to compress with python's zlib because I
> >> have
> >> >>> legacy tables that were compressed using MySQL (which has a weird
> >> non-
> >> >>> standard zip header and body), and I need to interface with them.
> >> >>> Anyway, during an insert or update, I want to grab the 'text'
> >> variable
> >> >>> from the instance object and insert it into the database like:
> >> >>> COMPRESS("the text value"). Obviously context.current_parameters is
> >> >>> not the appropriate object, but I can't figure out if it's possible
> >> to
> >> >>> access the instance being inserted/updated.
>
> >> >> are you trying to create a *default* value for an INSERT/UPDATE when
> >> NULL
> >> >> would otherwise be passed, or are you trying to run all
> >> incoming/outgoing
> >> >> data through a SQL function ? those are two completely separate
> >> topics.
>
> >> >>> def compress_text(context):
> >> >>> return "COMPRESS('%s')" % context.current_parameters['text']
>
> >> >>> class Tree(BaseStruct, Base):
> >> >>> __tablename__ = 'tree'
> >> >>> __table_args__ = (
> >> >>> {'autoload':True}
> >> >>> )
>
> >> >>> compressed =
> >> >>> deferred(Column(Binary(),default=compress_text,default=compress_text,onupdate=compress_text))
> >> >>> text =
> >> >>> column_property(select(["UNCOMPRESS(compressed)"]),deferred=True)
>
> >> >>> Is this possible with 0.5.7?
>
> >> >>> --
> >> >>> 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.
>
> >> > --
> >> > 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
> >> athttp://groups.google.com/group/sqlalchemy?hl=en.
>
> > --
> > 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.

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