sql >> Database teknologi >  >> RDS >> Mysql

MySql cursors.execute() med kun én parameter:Hvorfor er en streng opskåret i en liste?

Problemet er, at ('hello') er en streng og ('hello',) er en tuple . Du skal altid sende en tuple (eller anden sådan samling, som en liste) som værdier for dine pladsholdere. Årsagen er, at dine pladsholdere er positionelle i din forespørgsel, så argumenterne skal også have en vis rækkefølge - og tupler og lister er to måder at få et ordnet udvalg af objekter på.

Siden den forventer en tupel eller anden samling, 106 bliver konverteret til [1, 0, 6] . Hvis du indtaster (106,) , vil det blive fortolket korrekt.

Bag kulisserne er dette, hvad der foregår:

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

Så dit 'hack' er faktisk den rigtige løsning, du behøver bare ikke den ekstra variabel:

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



  1. Ydeevnegrænser for logiske replikeringsløsninger

  2. Udfør kun en trigger, når visse kolonner er opdateret (SQL-server)

  3. Android-program til at konvertere SQLite-databasen til excel

  4. Mød Michal Bar og mig hos Microsoft Ignite!