Problemet er, at ('hello')
er en streng og ('hello',)
er en tuple . Du skal altid sende en tuple (eller anden sådan samling, som en liste) som værdier for dine pladsholdere. Årsagen er, at dine pladsholdere er positionelle i din forespørgsel, så argumenterne skal også have en vis rækkefølge - og tupler og lister er to måder at få et ordnet udvalg af objekter på.
Siden den forventer en tupel eller anden samling, 106
bliver konverteret til [1, 0, 6]
. Hvis du indtaster (106,)
, vil det blive fortolket korrekt.
Bag kulisserne er dette, hvad der foregår:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Så dit 'hack' er faktisk den rigtige løsning, du behøver bare ikke den ekstra variabel:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))