Re: [Python] Per gli esperti di sql

2015-05-14 Per discussione simozack
Il giorno 14 maggio 2015 15:07, Riccardo Brazzale 
riccardo.brazz...@gmail.com ha scritto:

 Mettere nell'except una roba del tipo print(var1, var2) potrebbe starci se
 hai 2 valori ma l'sql contiene in realtà centinaia di campi e avere la
 stringa sql in chiaro risulterebbe (per me) più leggibile in quanto ha il
 campo associato al valore.

 Non sono un esperto, ma la cosa più comoda che ho trovato sperimentando è
utilizzare un dizionario con i parametri: facile da manutenere e molto
utile per capire dove ci sono gli errori.

L'SQL si esegue così:
cursor.execute(SELECT * FROM TABELLA WHERE PAR1=:par1 and PAR2=:par2,
{'par1':'pippo', 'par2':1})

Ciao,
Simone
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Per gli esperti di sql

2015-05-14 Per discussione Riccardo Brazzale
Ciao,

Mi connetto a un database mysql con mysql.connector ma potrebbe essere
qualsiasi altro motore DB. So che PG sarebbe passerebbe più innosservato in
questa ML :-)

Faccio una semplice sql:

sql = SELECT * FROM table WHERE campo 1 = %s AND campo2 = %s

curs.execute(sql, (var1, var2, ))

Fin qui tutto ok.

Ora ipotizziamo che l' sql stia all'interno di un ciclo che sta girando su
svariate centinaia di migliaia di combinazioni di var1 e var2 ed a un certo
punto fallisca in quanto var1 o var2 contengono valori che non vanno bene
per il rispettivo campo.

Come faccio a fare una cosa del tipo:

try:
curs.execute(sql, (var1, var2, ))

except:

print(ultima_istruzione_sql_eseguita)

in modo che ultima_istruzione_sql_eseguita sia
SELECT * FROM table WHERE campo1 = 'ABCDEF' AND campo2 = '\x3BRGF'?


Mettere nell'except una roba del tipo print(var1, var2) potrebbe starci se
hai 2 valori ma l'sql contiene in realtà centinaia di campi e avere la
stringa sql in chiaro risulterebbe (per me) più leggibile in quanto ha il
campo associato al valore.

Ho googlato in giro, qualcuno parla di cursor.statement ma a me non funza.

Grazie!



-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Per gli esperti di sql

2015-05-14 Per discussione Matteo Boscolo

Il 14/05/2015 15:30, simozack ha scritto:
Il giorno 14 maggio 2015 15:07, Riccardo Brazzale 
riccardo.brazz...@gmail.com mailto:riccardo.brazz...@gmail.com ha 
scritto:


Mettere nell'except una roba del tipo print(var1, var2) potrebbe
starci se hai 2 valori ma l'sql contiene in realtà centinaia di
campi e avere la stringa sql in chiaro risulterebbe (per me) più
leggibile in quanto ha il campo associato al valore.

Non sono un esperto, ma la cosa più comoda che ho trovato 
sperimentando è utilizzare un dizionario con i parametri: facile da 
manutenere e molto utile per capire dove ci sono gli errori.


L'SQL si esegue così:
cursor.execute(SELECT * FROM TABELLA WHERE PAR1=:par1 and 
PAR2=:par2, {'par1':'pippo', 'par2':1})


Ciao,
Simone


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

io ormai uso solo sqlalchemy ..
in caso di errore ci pensa lui a darli il log con l'sql che si rompe ..

ciao,
Matteo



---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! 
Antivirus.
http://www.avast.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Per gli esperti di sql

2015-05-14 Per discussione Diego Barrera

Il 14/05/2015 15:07, Riccardo Brazzale ha scritto:

Ciao,

Mi connetto a un database mysql con mysql.connector ma potrebbe essere 
qualsiasi altro motore DB. So che PG sarebbe passerebbe più 
innosservato in questa ML :-)


Faccio una semplice sql:

sql = SELECT * FROM table WHERE campo 1 = %s AND campo2 = %s

curs.execute(sql, (var1, var2, ))

Fin qui tutto ok.

Ora ipotizziamo che l' sql stia all'interno di un ciclo che sta 
girando su svariate centinaia di migliaia di combinazioni di var1 e 
var2 ed a un certo punto fallisca in quanto var1 o var2 contengono 
valori che non vanno bene per il rispettivo campo.


Come faccio a fare una cosa del tipo:

try:
curs.execute(sql, (var1, var2, ))

except:

print(ultima_istruzione_sql_eseguita)

in modo che ultima_istruzione_sql_eseguita sia
SELECT * FROM table WHERE campo1 = 'ABCDEF' AND campo2 = '\x3BRGF'?



Se prima del try ti crei la stringa?

curr_sql = sql % (var1, var2)
try:
curs.execute(curr_sql)
except:
print curr_sql

Magari mettici pure l'errore generato..

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Per gli esperti di sql

2015-05-14 Per discussione Carlo Miron
Il 14/mag/2015 21:32, Diego Barrera diegonebarr...@yahoo.it ha scritto:

 Se prima del try ti crei la stringa?

 curr_sql = sql % (var1, var2)
 try:
 curs.execute(curr_sql)
 except:
 print curr_sql

 Magari mettici pure l'errore generato..

bobby tables.

©

-- 
|:**THE BEER-WARE LICENSE** (Revision 42):
| ca...@miron.it wrote this mail. As long as you retain
| this notice you can do whatever you want with this stuff.
| If we meet some day, and you think this stuff is worth it,
| you can buy me a beer in return.
|--Carlo Miron :
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python