sql >> Base de Datos >  >> RDS >> Mysql

MySql cursors.execute() con un solo parámetro:¿Por qué una cadena se divide en una lista?

El problema es que ('hello') es una cadena y ('hello',) es una tupla . Siempre debe pasar una tupla (u otra colección similar, como una lista) como valores para sus marcadores de posición. La razón es que sus marcadores de posición son posicionales en su consulta, por lo que los argumentos también deben tener cierto orden, y las tuplas y las listas son dos formas de obtener una selección ordenada de objetos.

Dado que espera una tupla u otra colección, 106 se convierte en [1, 0, 6] . Si pasa (106,) , se interpretará correctamente.

Detrás de escena, esto es lo que está pasando:

>>> for i in '106':
...     print(i)
...
1
0
6
>>> for i in ('106',):
...    print(i)
...
106

Entonces, su 'truco' es en realidad la solución correcta, simplemente no necesita la variable adicional:

q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))