Đâ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
.