Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chiến lược ký tự thoát tốt nhất cho kết hợp Python / MySQL là gì?

Đây là một ví dụ:

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

Cập nhật

Đây là một bình luận ngắn gọn:

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

Luôn luôn là một ý tưởng hay để thoát khỏi bất kỳ thứ gì đi vào truy vấn. Trong trường hợp này, chúng tôi đang thêm động một tên cột và do đó nó phải được thoát ra trước khi truy vấn được thực thi.

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

Tôi đang hình thành truy vấn ở đây. Tôi đang cố gắng đạt được hai điều:(1) tạo một truy vấn với tên cột được điền bằng cách sử dụng cột column biến được khai báo ở dòng trước (2) thêm phần giữ chỗ sẽ được điền bởi các tham số thực tế trong quá trình thực thi truy vấn.

Đoạn mã dict(column = column) thực ra là một cách khác để tạo từ điển {'column': column} . Điều này có thể thực hiện được bằng cách sử dụng dict người xây dựng. Tôi chưa muốn điền vào các chủ sở hữu vị trí khác nên tôi thoát khỏi chúng bằng cách sử dụng hai dấu phần trăm (%% ).

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

Cuối cùng là thực hiện truy vấn. Nếu bạn in truy vấn trước khi thực thi, bạn sẽ thấy chuỗi 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 - Chọn dữ liệu từ nhiều bảng có cùng cấu trúc nhưng dữ liệu khác nhau

  2. hiển thị giá trị cơ sở dữ liệu trong khung phương thức chỉ hiển thị bản ghi đầu tiên

  3. Bắt org.hibernate.TransactionException:lỗi giao dịch lồng nhau không được hỗ trợ khi xóa

  4. Cách sử dụng OR &AND trong mệnh đề WHERE trong mysql

  5. SQL QUERY Sự cố sắp xếp kết quả