sql >> Databáze >  >> RDS >> Mysql

MySql cursors.execute() pouze s jedním parametrem:Proč je řetězec rozdělen do seznamu?

Problém je v tom, že ('hello') je řetězec a ('hello',) je n-tice . Jako hodnoty pro vaše zástupné symboly musíte vždy předat n-tici (nebo jinou podobnou kolekci, jako je seznam). Důvodem je, že vaše zástupné symboly jsou poziční ve vašem dotazu, takže argumenty by také měly mít nějaké pořadí - a n-tice a seznamy jsou dva způsoby, jak získat seřazený výběr objektů.

Protože očekává n-tici nebo jinou kolekci, 106 se převede na [1, 0, 6] . Pokud předáte (106,) , bude interpretováno správně.

V zákulisí se děje toto:

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

Takže váš 'hack' je vlastně správné řešení, jen nepotřebujete proměnnou navíc:

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



  1. Jak se vyhnout použití + v čísle verze s SQLiteAssetHelper

  2. Existuje optimální metoda pro objednání složeného indexu MySQL?

  3. Technické srovnání:Microsoft Access 2016 vs SQL Server 2016

  4. Vložení JSON do MySQL pomocí Pythonu