Dưới đâ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ài bình luận ngắn gọn:
column = str(MySQLdb.escape_string(row[1]))
Luôn luôn là một ý tưởng tốt để thoát khỏi bất cứ điều gì mà đi vào một truy vấn. Trong trường hợp này, chúng ta tự động thêm một tên cột và do đó nó phải được thoát trước khi truy vấn được thực hiện.
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column)
Tôi đang tạo truy vấn tại đâ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 biến số column
được khai báo trong dòng trước đó (2) thêm trình giữ chỗ sẽ được điền vào bởi các tham số thực tế trong khi thực hiện truy vấn.
Đoạn mã dict(column = column)
thực sự là một cách khác để tạo từ điển {'column': column}
. Điều này được thực hiện bằng cách sử dụng hàm tạo dict. Tôi không muốn điền vào các chủ sở hữu địa điểm khác chỉ để tôi thoát chúng bằng cách sử dụng hai dấu hiệu phần trăm (%%
).
cursor2.execute(query, [row[3], row[0]])
Cuối cùng, thực hiện truy vấn. Nếu bạn in truy vấn trước khi thực hiện, bạn sẽ thấy chuỗi update myTable set column_name = %s where ID = %s
.
Nguồn
2010-08-23 16:46:39
Chiến lược thoát tốt nhất cho Python + MySQL được chuẩn bị . – zneak
Bạn có thể vui lòng xây dựng? Cảm ơn! – ThinkCode
@zneak: prapare một chèn mở rộng với 1k hàng. – Mchl