[Zope-DB] Multi table update from one input form

Norman Khine norman@khine.net
Sun, 22 Sep 2002 21:40:08 +0100


Hi Dieter
I am using PostgreSQL for the database.
Not sure if I understand your solution, as this is what I thought was doing,
i.e. calling sequence_id_business_name as the DTML which calls the last
value added to this sequence_table, BUT I get an error, as the output of
this method is "Shared.DC.ZRDB.Results.Results instance at 141d744", which I
guess is what is causing the error as it is trying to put this into the
fk_business_name field; as this is the default way for Python to provide the
representation of an object, so to return the last value, I did this:

<dtml-in sequence_id_business_name>
<dtml-in sequence-item >
<dtml-var sequence-item>
</dtml-in-->
</dtml-in>

Which returned the last value as required and added it to the database.

How would this be done with a python script?

many thanks

Norman


----- Original Message -----
From: "Dieter Maurer" <dieter@handshake.de>
To: "Norman Khine" <norman@khine.net>
Cc: <zope-db@zope.org>
Sent: Sunday, September 22, 2002 6:12 PM
Subject: Re: [Zope-DB] Multi table update from one input form


> Norman Khine writes:
>  > ...
>  > select last_value from business_name_business_name_seq as
fk_business_id
>  > <dtml-var sql_delimiter>
>  > INSERT INTO business_address (street_name, town, county, postcode,
>  > ...
>  > <dtml-var fk_business_id>);
>  >
>  > But this does not work, and I get the following error:
>  >
>  > KeyError: fk_business_id
> As you found out, there is no magic connection between the results
> of a previous SQL command and the DTML variables of a current one.
>
> You need to use either SQL features or work with separate Z SQL Methods
> with gluing code in DTML (or, better, Python Script).
>
> You do not told us what database you used. Depending on the system,
> you might access "fk_business_id" either with a nested "select" (will not
> work with MySQL) or with an SQL function that directly accesses
> the "last_value" of "business_name_business_name_seq", e.g.
> "last_value(business_name_business_name_seq)".
>
>
> Dieter
>