Masalahnya adalah ('hello')
adalah string dan ('hello',)
adalah tupel . Anda harus selalu memberikan Tuple (atau koleksi lain seperti itu, seperti daftar) sebagai nilai untuk placeholder Anda. Alasannya adalah bahwa placeholder Anda berposisi dalam kueri Anda, jadi argumen juga harus memiliki urutan tertentu - dan tupel serta daftar adalah dua cara untuk mendapatkan pilihan objek yang terurut.
Karena mengharapkan Tuple atau koleksi lainnya, 106
akan dikonversi ke [1, 0, 6]
. Jika Anda memasukkan (106,)
, itu akan ditafsirkan dengan benar.
Di balik layar, inilah yang terjadi:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Jadi, 'retas' Anda sebenarnya adalah solusi yang tepat, Anda hanya tidak memerlukan variabel tambahan:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))