sql >> Database >  >> RDS >> Mysql

MySql cursors.execute() met slechts één parameter:Waarom wordt een string in een lijst gesegmenteerd?

Het probleem is dat ('hello') is een string en ('hello',) is een tupel . U moet altijd een tuple (of een andere dergelijke verzameling, zoals een lijst) doorgeven als de waarden voor uw tijdelijke aanduidingen. De reden is dat uw tijdelijke aanduidingen positioneel zijn in uw zoekopdracht, dus de argumenten moeten ook een bepaalde volgorde hebben - en tupels en lijsten zijn twee manieren om een ​​geordende selectie van objecten te krijgen.

Omdat het een tuple of een andere verzameling verwacht, 106 wordt geconverteerd naar [1, 0, 6] . Als je slaagt in (106,) , het zal correct worden geïnterpreteerd.

Achter de schermen is dit wat er aan de hand is:

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

Dus je 'hack' is eigenlijk de juiste oplossing, je hebt alleen de extra variabele niet nodig:

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



  1. Standaarden / conventies voor kolomnaam in MySQL

  2. Niet-gevangen uitzondering 'PDOException'-bericht 'ongeldige gegevensbronnaam'

  3. Snelle MySQL-tip:de functie LENGTH en TRIM gebruiken

  4. Fout:de methode of bewerking is niet geïmplementeerd. tijdens het steigeren van MYSQL-database