[PIPython] problema tuple

Matteo Giacomazzi matteo.giacomazzi
Mar 12 Apr 2005 15:39:25 CEST


Ciao Mariano,

> avendo la seguente tupla:
> 
> t = [1000,1001]
> 
> e la seguente query:
> 
> "select * from <table> where <column> in %s" % tuple([x for x in t])
> 
> il risultato sarà:
> 
> select * from <table> where <column> in (1000,1001)

tuple([x for x in t])
è equivalente a
tuple(t)
Effettivamente t è una lista e non una tupla.

> Il problema sorge quando nella tupla c'è un solo elemento, il che 
> genererà nella query:
> 
> select * from <table> where <column> in (1000, )
> 
> dando naturalmente errore di SQL.
> 
> Soluzioni?

Puoi fare così:

"select * from <table> where <column> in (%s)" % ','.join(t)

nel caso di un solo elemento in t risulterà comunque una query 
sintatticamente valida.
In verità il modo migliore sarebbe:

"select * from <table> where <column> in (%s)" % ','.join(['%s']*len(t))

e poi passare tuple(t) come parametro al metodo execute del cursore 
(così eventuali escape vengono gestiti dal modulo del DB).

Ciao,
   Matteo


More information about the Python mailing list