[Zope] ZSQL Method Question

Cliff Ford Cliff.Ford at ed.ac.uk
Tue Jul 18 06:52:31 EDT 2006


Comment on Peter's suggestion: I am no expert on these things, but it is 
my understanding that for MySQL LAST_INSERT_ID() fetches the last 
autoincrement value made by the current insert, so the outcome is not 
affected by virtually simultaneous requests. And I don't think MySQL 
accepts a value for the autoincrement key. I am a bit surprised that the 
code you quote is reliable - surely there is a possibility of an insert 
after calling GetNextID and before calling SQLInsert in the python code?

Comment on Tino's suggestion: I think that LAST_INSERT_ID() is MySQL 
specific and I guess CURRVAL() is Postgres specific. But the principle 
is the same: calling within the same Z SQL Method ought to be safe.

Anyway, I hope John has had is question answered.

Cliff

Tino Wildenhain wrote:
> Peter Bengtsson wrote:
> 
>>What if you have 1,000,000 requests/sec?
>>What if between the INSERT and the LAST_INSERT_ID() another INSERT is made?
>>
>>I use PostgreSQL and with postgres you can always ask the sequence what
>>the next id is going to be. It goes something like this::
>>
>>next_id = context.GetNextId()[0].next_id
>>context.SQLInsertUser(uid=next_id, name='Peter')
>>
>>where 'GetNextId' is a ZSQL method that looks like this::
>>
>><params></params>
>>SELECT NEXTVAL('users_uid_seq') AS next_id
> 
> 
> Its even easier:
> one ZSQL Method:
> 
> INSERT INTO foo (foo_id,blah,bar) VALUES
> (nextval('foo_foo_id_seq'),<dtml-sqlvar blah> ... );
> SELECT CURRVAL('foo_foo_id_seq') as foo_id;
> 
> But your above solution is valid too.
> 
> Regards
> Tino
> _______________________________________________
> Zope maillist  -  Zope at zope.org
> http://mail.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists - 
>  http://mail.zope.org/mailman/listinfo/zope-announce
>  http://mail.zope.org/mailman/listinfo/zope-dev )


More information about the Zope mailing list