Problem polega na tym, że ('hello')
jest ciągiem i ('hello',)
jest krotką . Zawsze musisz przekazać krotkę (lub inną taką kolekcję, taką jak lista) jako wartości symboli zastępczych. Powodem jest to, że Twoje symbole zastępcze są pozycyjne w zapytaniu, więc argumenty również powinny mieć pewną kolejność - a krotki i listy to dwa sposoby na uzyskanie uporządkowanego wyboru obiektów.
Ponieważ oczekuje na krotkę lub inną kolekcję, 106
zostaje przekonwertowany na [1, 0, 6]
. Jeśli zdasz (106,)
, zostanie poprawnie zinterpretowany.
Za kulisami dzieje się tak:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Tak więc Twój „hack” jest właściwie poprawnym rozwiązaniem, po prostu nie potrzebujesz dodatkowej zmiennej:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))