Mysql
 sql >> база данни >  >> RDS >> Mysql

Коя е най-добрата стратегия за бягство на символите за комбинацията Python/MySQL?

Ето един пример:

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]])

Актуализиране

Ето кратък коментар:

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

Винаги е добра идея да избягвате всичко, което влиза в заявка. В този случай ние динамично добавяме име на колона и следователно то трябва да бъде екранирано, преди заявката да бъде изпълнена.

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

Формирам заявката тук. Опитвам се да постигна две неща:(1) да формирам заявка с име на колона, попълнено с помощта на column променлива, декларирана в предишния ред (2), добавят заместители, които ще бъдат попълнени от действителни параметри по време на изпълнение на заявката.

Фрагментът dict(column = column) всъщност е друг начин за създаване на речника {'column': column} . Това става възможно с помощта на dict конструктор. Все още не искам да попълвам другите места, така че ги избягвам с два знака за процент (%% ).

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

Накрая изпълнете заявката. Ако отпечатате заявка преди да я изпълните, ще видите низа 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. MySQL Изберете заявка, за да извлечете база от записи на стойности от списъка

  2. Грешка при SSL връзката при свързване към RDS MySQL от Django

  3. Рекурсивна MySQL заявка?

  4. Как да покажа стойността на променлива в командния ред в MySQL?

  5. Глобално изчакване на заявка в MySQL 5.6