PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Psycopg2 Вмъкване в таблица с заместители

Използвате форматиране на низове на Python и това е много лоша идея (TM). Помислете за SQL инжекция. Правилният начин да го направите е да използвате свързани променливи:

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

където наборът от параметри се дава като втори аргумент на execute() . Също така не е нужно да избягвате каквато и да е стойност, psycopg2 ще направи екранирането вместо вас. В този конкретен случай също се препоръчва да не се предава името на таблицата в променлива (escaped_name ), но за да го вградите в низа на заявката:psycopg2 не знае как да цитира имена на таблици и колони, а само стойности.

Вижте документацията на psycopg2:

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

Ако искате да генерирате програмно SQL израза, обичайният начин е да използвате Python форматиране за израза и свързване на променлива за аргументите. Например, ако имате името на таблицата в escaped_name можете да направите:

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

Очевидно, за да използвате заместители във вашата заявка, трябва да цитирате всеки % които въвеждат обвързан аргумент в първия формат.

Имайте предвид, че това е безопасно ако и само ако escaped_name се генерира от вашия код, пренебрегвайки всякакви външни входни данни (например име на основата на таблицата и брояч), но е изложен на риск от SQL инжекция, ако използвате данни, предоставени от потребителя.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на PostgreSQL последователност към поле (което не е ID на записа)

  2. Разбиране на типовете дата и функциите на PostgreSQL (по примери)

  3. Избройте всички имена на индекси, имена на колони и името на таблицата на PostgreSQL база данни

  4. SQL, Postgres OID, какви са те и защо са полезни?

  5. За начинаещ, има ли голяма разлика между MySQL и PostgreSQL