Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySql cursors.execute() z tylko jednym parametrem:Dlaczego ciąg jest pocięty na listę?

Problem polega na tym, że ('hello') jest ciągiem i ('hello',) jest krotką . Zawsze musisz przekazać krotkę (lub inną taką kolekcję, taką jak lista) jako wartości symboli zastępczych. Powodem jest to, że Twoje symbole zastępcze są pozycyjne w zapytaniu, więc argumenty również powinny mieć pewną kolejność - a krotki i listy to dwa sposoby na uzyskanie uporządkowanego wyboru obiektów.

Ponieważ oczekuje na krotkę lub inną kolekcję, 106 zostaje przekonwertowany na [1, 0, 6] . Jeśli zdasz (106,) , zostanie poprawnie zinterpretowany.

Za kulisami dzieje się tak:

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

Tak więc Twój „hack” jest właściwie poprawnym rozwiązaniem, po prostu nie potrzebujesz dodatkowej zmiennej:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL SERVER – Sztuczka – Uruchamianie SSMS z innym kontem Windows

  2. Różnica daty/czasu w PHP/MySQL

  3. Czy kolejność warunków w klauzuli WHERE wpływa na wydajność MySQL?

  4. MySQL Cluster (NDB) vs MySQL Replication (InnoDB) dla aplikacji Rails 3:zalety/minusy?

  5. Jak przekonwertować cały zestaw znaków bazy danych MySQL i sortowanie do UTF-8?