Mysql
 sql >> Database >  >> RDS >> Mysql

MySql cursors.execute() con un solo parametro:perché una stringa è suddivisa in un elenco?

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,))