Hãy cẩn thận với việc sử dụng nội suy chuỗi cho các truy vấn SQL, vì nó sẽ không thoát khỏi các tham số đầu vào một cách chính xác và sẽ khiến ứng dụng của bạn mở ra các lỗ hổng SQL injection. Sự khác biệt có vẻ nhỏ, nhưng thực tế là rất lớn .
Không chính xác (có vấn đề bảo mật)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Đúng (có thoát)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Nó làm tăng thêm sự nhầm lẫn rằng các công cụ sửa đổi được sử dụng để liên kết các tham số trong một câu lệnh SQL khác nhau giữa các triển khai DB API khác nhau và thư viện máy khách mysql sử dụng printf
cú pháp kiểu thay vì '?' thường được chấp nhận hơn điểm đánh dấu (được sử dụng bởi ví dụ:python-sqlite
).