Het probleem is dat ('hello')
is een string en ('hello',)
is een tupel . U moet altijd een tuple (of een andere dergelijke verzameling, zoals een lijst) doorgeven als de waarden voor uw tijdelijke aanduidingen. De reden is dat uw tijdelijke aanduidingen positioneel zijn in uw zoekopdracht, dus de argumenten moeten ook een bepaalde volgorde hebben - en tupels en lijsten zijn twee manieren om een geordende selectie van objecten te krijgen.
Omdat het een tuple of een andere verzameling verwacht, 106
wordt geconverteerd naar [1, 0, 6]
. Als je slaagt in (106,)
, het zal correct worden geïnterpreteerd.
Achter de schermen is dit wat er aan de hand is:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Dus je 'hack' is eigenlijk de juiste oplossing, je hebt alleen de extra variabele niet nodig:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))