Vấn đề là ('hello')
là một chuỗi và ('hello',)
là một tuple . Bạn cần phải luôn chuyển một tuple (hoặc tập hợp khác như vậy, chẳng hạn như danh sách) làm giá trị cho trình giữ chỗ của bạn. Lý do là trình giữ chỗ của bạn là vị trí trong truy vấn của bạn, vì vậy các đối số cũng phải có một số thứ tự - và bộ giá trị và danh sách là hai cách để có được lựa chọn có thứ tự các đối tượng.
Vì nó mong đợi một bộ tuple hoặc bộ sưu tập khác, 106
được chuyển đổi thành [1, 0, 6]
. Nếu bạn nhập (106,)
, nó sẽ được diễn giải một cách chính xác.
Phía sau hậu trường, đây là những gì đang diễn ra:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
Vì vậy, 'hack' của bạn thực sự là giải pháp chính xác, bạn không cần thêm biến:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))