Проблемы при вводе строк в качестве параметра в параметризованном запросе с psycopg2 в python - PullRequest
0 голосов
/ 13 июля 2020

Теперь я пытаюсь прочитать sth из базы данных параметризованным запросом. Чтобы избежать внедрения SQL, я написал код следующим образом:

param = 'Peter'
column_name = 'employee.name'
table_name = 'employee'
param_query = 'SELECT * FROM %s WHERE %s = %s'

# Return outcome
cur.execute(param_query, [table_name, column_name, param])
outcome = cur.fetchall()

print(outcome)

И я получил следующую ошибку:

psycopg2.errors.SyntaxError: syntax error at or near "'employee'"
LINE 1: SELECT * FROM 'employee' WHERE 'employee.name' = 'Peter'

Как новичок в программировании баз данных, я хочу спросить :

  1. Как я могу избавиться от этих цитат из запроса? Или я здесь ошибаюсь?
  2. Это хорошая практика для предотвращения SQL инъекций? Или это хорошая практика для написания параметризованного запроса вроде этого?

Заранее благодарим за вашу помощь!

1 Ответ

0 голосов
/ 14 июля 2020

Проблема решена следующим образом:

param = 'Peter'.lower()
column_name = AsIs('employee.name')
table_name = AsIs('employee')
param_query = 'SELECT * FROM %s WHERE %s = %s'

# Return outcome
cur.execute(param_query, [table_name, column_name, param])
outcome = cur.fetchall()
...