[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