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

Jaka jest najlepsza strategia ucieczki dla kombinacji Python/MySQL?

Oto przykład:

import MySQLdb
column = str(MySQLdb.escape_string(row[1]))
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
cursor2.execute(query, [row[3], row[0]])

Aktualizacja

Oto krótki komentarz:

column = str(MySQLdb.escape_string(row[1]))

Zawsze dobrym pomysłem jest uniknięcie wszystkiego, co wchodzi w skład zapytania. W tym przypadku dynamicznie dodajemy nazwę kolumny i dlatego należy ją zmienić przed wykonaniem zapytania.

query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 

Tutaj tworzę zapytanie. Próbuję osiągnąć dwie rzeczy:(1) formularz zapytania z nazwą kolumny wypełnioną przy użyciu column zmienna zadeklarowana w poprzednim wierszu (2) dodaje symbole zastępcze, które zostaną wypełnione przez rzeczywiste parametry podczas wykonywania zapytania.

Fragment kodu dict(column = column) jest właściwie innym sposobem tworzenia słownika {'column': column} . Jest to możliwe dzięki dyktaturze konstruktor. Nie chcę jeszcze wypełniać pozostałych symboli zastępczych, więc unikam ich za pomocą dwóch znaków procentowych (%% ).

cursor2.execute(query, [row[3], row[0]])

Na koniec wykonaj zapytanie. Jeśli wydrukujesz zapytanie przed wykonaniem, zobaczysz ciąg update myTable set column_name = %s where ID = %s .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ZMIEŃ znak nowej linii w MYSql nie działa

  2. Przykłady UTC_DATE – MySQL

  3. Szukam sortowania MySQL bez rozróżniania wielkości liter, gdzie a !=ä

  4. Jak zadeklarować tabelę wewnętrzną w MySQL?

  5. Sphinx bez użycia identyfikatora auto_increment