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

psycopg2 cursor.execute () với tham số truy vấn SQL gây ra lỗi cú pháp

Tôi tin rằng các câu lệnh được tham số hóa như thế này được sử dụng với giá trị và không phải tên bảng (hoặc từ khóa SQL, v.v.). Vì vậy, về cơ bản bạn không gặp may với điều này.

Tuy nhiên, đừng lo lắng, vì cơ chế này nhằm ngăn chặn việc tiêm SQL và bạn thường biết bảng nào bạn muốn truy cập tại thời điểm viết mã, vì vậy rất ít khả năng ai đó có thể đưa mã độc vào. Chỉ cần tiếp tục và viết bảng trong chuỗi.

Nếu, vì một số lý do (có thể là sai lầm) mà bạn giữ tham số của tên bảng như vậy:

  1. Nếu tên bảng đến từ chương trình của bạn (ví dụ:từ điển hoặc thuộc tính lớp), thì hãy thực hiện thay thế chuỗi thông thường.
  2. Nếu tên bảng đến từ thế giới bên ngoài (nghĩ là "đầu vào của người dùng"):không làm như vậy hoặc tin tưởng hoàn toàn vào người dùng và áp dụng phương pháp trước đó 1.

Ví dụ:

cursor.execute(
    'SELECT * FROM %s where %s = %s'
    % ("my_table", "colum_name", "%s"), #1
    ("'some;perverse'string;--drop table foobar")) #2

#1 :Hãy để% s thứ ba được thay thế bằng một '% s' khác tại thời điểm này, để cho phép xử lý sau bởi psycopg2 #2 :Đây là chuỗi sẽ được psycopg2 trích dẫn chính xác và được đặt thay vì '% s' thứ ba trong chuỗi gốc



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo và xóa cơ sở dữ liệu và bảng trong PostgreSQL

  2. Truy vấn PostgreSQL chậm khi sử dụng NOT IN

  3. Chèn từ điển nhỏ như {1:23, 2:45, 3:17} vào một cột của bảng cơ sở dữ liệu SQL trong Postgres bằng ngôn ngữ python

  4. PostgreSQL - giá trị nối tiếp tiếp theo trong bảng

  5. PostgreSQL:chọn các hàng xảy ra vào một ngày nhất định trong tuần, trong một múi giờ cụ thể