sql >> Databasteknik >  >> RDS >> Mysql

MySql cursors.execute() med bara en parameter:Varför är en sträng delad i en lista?

Problemet är att ('hello') är en sträng och ('hello',) är en tuppel . Du måste alltid skicka en tupel (eller annan sådan samling, som en lista) som värden för dina platshållare. Anledningen är att dina platshållare är positionella i din fråga, så argumenten bör också ha en viss ordning - och tupler och listor är två sätt att få ett ordnat urval av objekt.

Eftersom det väntar en tuppel eller annan samling, 106 konverteras till [1, 0, 6] . Om du skickar in (106,) , kommer det att tolkas korrekt.

Bakom kulisserna är det här vad som händer:

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

Så ditt "hack" är faktiskt den korrekta lösningen, du behöver bara inte den extra variabeln:

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



  1. Gettext eller databasöversättning

  2. hur man får alla mysql tuple-resultat och konverterar till json

  3. Hur ändrar man negativt värde till positivt i Oracle?

  4. Hur man summerar från MySQL för varje n post