Il problema è che ('hello')
è una stringa e ('hello',)
è una tupla . Devi sempre passare una tupla (o un'altra raccolta simile, come un elenco) come valori per i tuoi segnaposto. Il motivo è che i tuoi segnaposto sono posizionali nella tua query, quindi anche gli argomenti dovrebbero avere un certo ordine e le tuple e gli elenchi sono due modi per ottenere una selezione ordinata di oggetti.
Poiché si aspetta una tupla o un'altra raccolta, 106
viene convertito in [1, 0, 6]
. Se superi (106,)
, verrà interpretato correttamente.
Dietro le quinte, ecco cosa sta succedendo:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Quindi, il tuo "hack" è in realtà la soluzione corretta, semplicemente non hai bisogno della variabile extra:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))