[Python] next record in mysqldb

Daniele Varrazzo piro a develer.com
Lun 1 Ott 2007 17:56:20 CEST


Manlio Perillo ha scritto:
> Paolo Amodio ha scritto:
>> Buon giorno a tutti.
>> Una breve domanda.
>> Eseguita una query e ritornati i risultati ho la necessità di 
>> avanzare, o retrocedere, di un record (i risultati popolano dei campi 
>> in wxPython).
>> Attualmente e per il momento ho creato una funzione che, ricevuto il 
>> valore attuale del record (in realtà del campo ID), effettua una nuova 
>> query.
>> Il sistema mi sembra macchinoso.
>> Esiste qualche cosa di migliore?
>>
> 
> Si, usare i cursori lato server.
> PostgreSQL li supporta, e sembra che anche MySQL dalla versione 5.0.2 lo 
> faccia.
> http://dev.mysql.com/doc/refman/5.0/en/cursor-restrictions.html

Per quanto riguarda MySQLdb si possono avere cursori lato server usando la 
classe SSCursor o altre classi derivate dal CursorUseResultMixIn, ma questo 
non implementano il metodo scroll, per cui indietro non si torna (ma non è 
idiota? mah...).

La classe CursorStoreResultMixIn, da cui deriva il normale Cursor, invece 
implementa il metodo scroll(), che può essere usato per tornare indietro. Ma 
tutto il dataset viene caricato nel client.

La documentazione a riguardo credo sia zero: occorre leggersi 
"MySQLdb.cursor.py" per capirci qualcosa.

Paolo, se finora hai usato "cnn.cursor()" senza parametri, allora hai sempre 
usato cursori client-side: usa cur.scroll(-1) per tornare indietro di un record.

In PostgreSQL ci sono i named cursor per fare queste cose: non so se scrollano 
all'indietro ma, considerando la sanità mentale che caratterizza il mondo PG, 
immagino di sì. Credo che all'OP gliene freghi il giusto comunque.

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python