[Zope] Separating assignments in Z SQL Updates

Thomas B. Passin tpassin@mitretek.org
Mon, 14 May 2001 13:46:41 -0400


[Bruce Eckel]

> I'm trying to write a ZSQL method that will do a general
> update to a record. I started out attempting to do what I
> thought was the 'normal' thing:
>
> update Table set name1='value1', name2='value2',
> name3='value3' [...] where id='idvalue';
>
> I wanted to use dtml to automatically build a statement
> that would only assign values if new values existed. The
> problem with this is the commas: you have to have commas
> between the assignments, but you can have a comma after the
> last assignment. And I couldn't figure out how to
> conditionally insert the commas.
>

Just for fun I came up with this approach.  The key is to have a dictionary
that returns a comma when you pass it a "1".  It's a lot cleaner than all
that conditional logic.  This has been tested and works.  The example
displays the string "A,B,C".

<dtml-let yesno="{0:'',1:','}">
   <dtml-let L="['A','B','C']">
      <dtml-let num="_.len(L)-1">
         <dtml-in L>
            <dtml-var "_['sequence-item']+yesno[_['sequence-index']<num]">
         </dtml-in>
      </dtml-let>
   </dtml-let>
</dtml-let>

Cheers,

Tom P