PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Psycopg2 Sisipkan Ke Tabel dengan Placeholder

Anda menggunakan pemformatan string Python dan ini adalah Ide Sangat Buruk (TM). Pikirkan injeksi SQL. Cara yang tepat untuk melakukannya adalah dengan menggunakan variabel terikat:

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))

di mana tupel parameter diberikan sebagai argumen kedua ke execute() . Anda juga tidak perlu melarikan diri dari nilai apa pun, psycopg2 akan melakukan pelarian untuk Anda. Dalam kasus khusus ini juga disarankan untuk tidak meneruskan nama tabel dalam suatu variabel (escaped_name ) tetapi untuk menyematkannya dalam string kueri:psycopg2 tidak tahu cara mengutip nama tabel dan kolom, hanya nilai.

Lihat dokumentasi psycopg2:

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

Jika Anda ingin membuat pernyataan SQL secara terprogram, cara yang biasa digunakan adalah menggunakan pemformatan Python untuk pernyataan dan pengikatan variabel untuk argumen. Misalnya, jika Anda memiliki nama tabel di escaped_name Anda dapat melakukan:

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

Jelas, untuk menggunakan placeholder dalam kueri Anda, Anda perlu mengutip % yang memperkenalkan argumen terikat dalam format pertama.

Perhatikan bahwa ini aman jika dan hanya jika escaped_name dihasilkan oleh kode Anda mengabaikan input eksternal apa pun (misalnya nama dasar tabel dan penghitung) tetapi berisiko injeksi SQL jika Anda menggunakan data yang disediakan oleh pengguna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengonfigurasi AppArmor untuk PostgreSQL dan TimescaleDB

  2. Impor CSV PostgreSQL dari baris perintah

  3. psql:FATAL:Otentikasi rekan gagal untuk pengembangan pengguna

  4. Bagaimana mengatasi masalah hak istimewa saat memulihkan Database PostgreSQL

  5. Cara Mengimpor File CSV di PostgreSQL