PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Psycopg2 Wstaw do tabeli z symbolami zastępczymi

Używasz formatowania napisów w Pythonie i jest to bardzo zły pomysł (TM). Pomyśl o wstrzykiwaniu SQL. Właściwym sposobem na to jest użycie powiązanych zmiennych:

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

gdzie krotka parametrów jest podana jako drugi argument funkcji execute() . Nie musisz też uciekać od żadnej wartości, psycopg2 zrobi to za Ciebie. W tym konkretnym przypadku sugeruje się również, aby nie przekazywać nazwy tabeli w zmiennej (escaped_name ), ale aby umieścić go w ciągu zapytania:psycopg2 nie umie cytować nazw tabel i kolumn, tylko wartości.

Zobacz dokumentację psycopg2:

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

Jeśli chcesz programowo wygenerować instrukcję SQL, zwyczajowym sposobem jest użycie formatowania Pythona dla instrukcji i powiązania zmiennych dla argumentów. Na przykład, jeśli masz nazwę tabeli w escaped_name możesz zrobić:

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

Oczywiście, aby użyć symboli zastępczych w zapytaniu, musisz zacytować dowolny % które wprowadzają powiązany argument w pierwszym formacie.

Pamiętaj, że jest to bezpieczne jeśli i tylko wtedy escaped_name jest generowany przez kod ignorujący wszelkie zewnętrzne dane wejściowe (na przykład nazwę bazy tabeli i licznik), ale istnieje ryzyko wstrzyknięcia kodu SQL, jeśli użyjesz danych dostarczonych przez użytkownika.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uwzględnić zero / 0 wyników w agregacji COUNT?

  2. Limit czasu zapytania w pg-promise

  3. PSQLException:Zestaw wyników nie jest prawidłowo ustawiony, być może trzeba wywołać następny

  4. WYJAŚNIENIE PostgreSQL – Jakie są koszty zapytań?

  5. Migracja z MSSQL do PostgreSQL — co powinieneś wiedzieć