Problém je v tom, že ('hello')
je řetězec a ('hello',)
je n-tice . Jako hodnoty pro vaše zástupné symboly musíte vždy předat n-tici (nebo jinou podobnou kolekci, jako je seznam). Důvodem je, že vaše zástupné symboly jsou poziční ve vašem dotazu, takže argumenty by také měly mít nějaké pořadí - a n-tice a seznamy jsou dva způsoby, jak získat seřazený výběr objektů.
Protože očekává n-tici nebo jinou kolekci, 106
se převede na [1, 0, 6]
. Pokud předáte (106,)
, bude interpretováno správně.
V zákulisí se děje toto:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Takže váš 'hack' je vlastně správné řešení, jen nepotřebujete proměnnou navíc:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))