首页 > 解决方案 > 在 python 中使用 psycopg2 在参数化查询中输入字符串作为参数时出现问题

问题描述

现在我正在尝试使用参数化查询从数据库中读取某些内容。为了避免 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 注入的好习惯吗?还是像这样编写参数化查询是一种好习惯?

提前谢谢你的帮助!

标签: pythonpsycopg2

解决方案


问题通过以下方式解决:

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

推荐阅读