RE: Using <dtml-var>s in ZSQL methods?
Andreas Jung <[email protected]> Sat, 16 Jun 2007 21:27:12 +0200
| Newsgroups | gmane.comp.web.zope.database |
|---|---|
| Message-ID | <[email protected]> |
First, Jaroslav is right. One time you're passing a string and next your passing a list. Make your choice how the API should looks like. Second..it would be *really* helpful to see the full traceback instead of just *Keyerror*. It's somewhat boring to ask every time for it :-) -aj --On 16. Juni 2007 15:19:10 -0400 Ken Winter <[email protected]> wrote: > Jaroslav ~ > > I'm pretty sure that 'delete_this' is a list (of integers), because the > lines > > " > p = context.REQUEST.get('delete_this') > s = ', '.join([str(x) for x in p]) > " > > process it correctly into the string 's'. In other words, I think it is > the same as if p had been assigned a list in this way: > > " > p = [9765, 10058, 11333] > s = ', '.join([str(x) for x in p]) > " > > In either case, s ends up as the string "9765, 10058, 11333". That's what > gets passed to the ZSQL method (below), and that's where the trouble seems > to be. > > I will put in another message to this thread documenting some further > experiments I have done. > > ~ Thanks > ~ Ken > > >> -----Original Message----- >> From: Jaroslav Lukesh [mailto:[email protected]] >> Sent: Saturday, June 16, 2007 1:41 AM >> To: Ken Winter; 'Zope-DB List' >> Subject: Re: [Zope-DB] Using <dtml-var>s in ZSQL methods? >> >> It is just because 'delete_this' is a string, not the list, or vice >> versa? >> >> ----- Original Message ----- >> From: "Ken Winter" <[email protected]> >> To: "'Zope-DB List'" <[email protected]> >> Sent: Saturday, June 16, 2007 5:15 AM >> Subject: [Zope-DB] Using <dtml-var>s in ZSQL methods? >> >> >> Here's the definition of a ZSQL method, "people_delete_by_id.zsql": >> >> " >> <dtml-comment> >> title: Method to delete People by ids given in a comma-separated list >> connection_id: my_database >> arguments: >> id_list >> </dtml-comment> >> >> delete from person >> where person_id in (<dtml-var id_list>) >> " >> >> >> Here's the puzzle: >> >> When I define and test this ZSQL method through the ZMI, passing it a >> string >> such as "9765, 10058, 11333", it indeed deletes the rows with those >> values on person_id. >> >> BUT when I invoke the same ZSQL method from a Python script with the >> following code: >> >> " >> p = context.REQUEST.get('delete_this') >> if p: >> s = ', '.join([str(x) for x in p]) >> context.people_delete_by_id(id_list=s) >> " >> >> ...and with a REQUEST variable 'delete_this' that comes from this snippet >> of >> a form in a page template: >> >> " >> <form method="post" name="form2" >> tal:attributes="action string:${here/absolute_url}/${template/id};"> >> >> <input type="hidden" name="form.submitted" value="1" /> >> <p class="error_message" tal:define="err errors/n|nothing" >> tal:condition="err"><b tal:content="err" /></p> >> >> <table> >> <tr tal:repeat="person options/data"><a name="id" id="id" >> tal:attributes="name person/person_id"></a> >> <td tal:condition="not:options/selectall | nothing" >> <input type="checkbox" name="delete_this:list:int" value="" >> tal:attributes="value person/person_id"/> >> </td> >> ... >> </tr> >> </table> >> ... >> </form> >> " >> >> ...and with the same three person_ids (9765, 10058, 11333) the 4th line >> of the Python script evokes an error: >> >> " >> KeyError: 'id_list' >> " >> >> The core idea is that the string id_list is passed into the ZSQL method, >> where it is spliced into the "delete...where" clause via the <dtml-var >> id_list>) to provide the list of person_ids to delete. >> >> >> Here's the question: >> >> WHY? >> >> ~ TIA >> ~ Ken >> >> P.S. I know that <dtml-var...> rather than <dtml-sqlvar...> is an >> unorthodox and apparently undocumented construct to use within a ZSQL >> definition. But I need it because <dtml-sqlvar...> malformats the >> string. And if doing this trick is a no-no, how come it works in the ZMI >> test but not when called from Python? More importantly, how can I get >> it to work from Python? >> >> _______________________________________________ >> Zope-DB mailing list >> [email protected] >> http://mail.zope.org/mailman/listinfo/zope-db > > _______________________________________________ > Zope-DB mailing list > [email protected] > http://mail.zope.org/mailman/listinfo/zope-db -- ZOPYX Ltd. & Co. KG - Charlottenstr. 37/1 - 72070 Tübingen - Germany Web: www.zopyx.com - Email: [email protected] - Phone +49 - 7071 - 793376 Registergericht: Amtsgericht Stuttgart, Handelsregister A 381535 Geschäftsführer/Gesellschafter: ZOPYX Limited, Birmingham, UK ------------------------------------------------------------------------ E-Publishing, Python, Zope & Plone development, Consulting _______________________________________________ Zope-DB mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope-db
signature.asc
(application/pgp-signature, 186 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) iD8DBQFGdDmRCJIWIbr9KYwRAgNvAKDU6LwZ4CCpwhTNyoV7ypc6+/wtyQCaA2wN 2SisFRxd3nfTP/nq5aYmhfE= =iHl4 -----END PGP SIGNATURE-----