Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql cursors.execute() mit nur einem Parameter:Warum wird ein String in eine Liste geschnitten?

Das Problem ist, dass ('hello') ist ein String und ('hello',) ist ein Tupel . Sie müssen immer ein Tupel (oder eine andere Sammlung wie eine Liste) als Werte für Ihre Platzhalter übergeben. Der Grund dafür ist, dass Ihre Platzhalter positional sind in Ihrer Abfrage, also sollten die Argumente auch eine gewisse Reihenfolge haben - und Tupel und Listen sind zwei Möglichkeiten, um eine geordnete Auswahl von Objekten zu erhalten.

Da es ein Tupel oder eine andere Sammlung erwartet, 106 wird in [1, 0, 6] konvertiert . Wenn Sie (106,) übergeben , wird es korrekt interpretiert.

Hinter den Kulissen läuft Folgendes ab:

>>> for i in '106':
...     print(i)
...
1
0
6
>>> for i in ('106',):
...    print(i)
...
106

Ihr 'Hack' ist also eigentlich die richtige Lösung, Sie brauchen nur die zusätzliche Variable nicht:

q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))