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

Psycopg2 Chèn vào bảng với trình giữ chỗ

Bạn đang sử dụng định dạng chuỗi Python và đây là một Ý tưởng Rất Xấu (TM). Hãy suy nghĩ về SQL-injection. Cách đúng để làm điều đó là sử dụng các biến bị ràng buộc:

cur.execute('INSERT INTO %s (day, elapsed_time, net_time, length, average_speed, geometry) VALUES (%s, %s, %s, %s, %s, %s)', (escaped_name, day, time_length, time_length_net, length_km, avg_speed, myLine_ppy))

trong đó bộ tham số được đưa ra làm đối số thứ hai cho execute() . Ngoài ra, bạn không cần phải thoát bất kỳ giá trị nào, psycopg2 sẽ thực hiện việc thoát cho bạn. Trong trường hợp cụ thể này, bạn cũng nên không chuyển tên bảng vào một biến (escaped_name ) nhưng để nhúng nó vào chuỗi truy vấn:psycopg2 không biết cách trích dẫn tên bảng và cột, chỉ có giá trị.

Xem tài liệu psycopg2:

https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries

Nếu bạn muốn tạo câu lệnh SQL theo chương trình, cách thông thường là sử dụng định dạng Python cho câu lệnh và liên kết biến cho các đối số. Ví dụ:nếu bạn có tên bảng trong escaped_name bạn có thể làm:

query = "INSERT INTO %s (col1, ...) VALUES (%%s, ...)" % escaped_name
curs.execute(query, args_tuple)

Rõ ràng, để sử dụng trình giữ chỗ trong truy vấn của bạn, bạn cần phải trích dẫn bất kỳ % nào giới thiệu một đối số ràng buộc ở định dạng đầu tiên.

Lưu ý rằng điều này an toàn nếu và chỉ khi escaped_name được tạo bởi mã của bạn bỏ qua bất kỳ đầu vào bên ngoài nào (ví dụ:tên cơ sở bảng và bộ đếm) nhưng có nguy cơ bị chèn SQL nếu bạn sử dụng dữ liệu do người dùng cung cấp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgAdmin III Tại sao kết quả truy vấn được rút ngắn?

  2. Chọn kiểu dữ liệu của trường trong postgres

  3. Làm cách nào để trả về mảng jsonb và mảng đối tượng từ dữ liệu của tôi?

  4. Tính tuổi theo năm trong PostgreSQL

  5. Cập nhật Postgresql với tham gia