問題は、('hello')
文字列であり、('hello',)
タプルです 。プレースホルダーの値として、常にタプル(またはリストなどの他のコレクション)を渡す必要があります。その理由は、プレースホルダーがポジショナルであるためです。 クエリでは、引数にも順序が必要です。タプルとリストは、オブジェクトの順序付き選択を取得する2つの方法です。
タプルまたは他のコレクションを想定しているため、106
[1, 0, 6]
に変換されます 。 (106,)
を渡した場合 、正しく解釈されます。
舞台裏では、これが起こっていることです:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
したがって、「ハック」は実際には正しい解決策であり、追加の変数は必要ありません。
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))