python - 在 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'
作为数据库编程的初学者,我想问:
- 我怎样才能摆脱查询中的那些引用?或者我在这里犯了什么错误?
- 这是防止 SQL 注入的好习惯吗?还是像这样编写参数化查询是一种好习惯?
提前谢谢你的帮助!
解决方案
问题通过以下方式解决:
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()
推荐阅读
- windows - 如何调查 Windows 升级兼容性问题?
- php - 如何创建检查是否创建了对话?(拉拉维尔)
- c - K&R C Programming book,第 4.3 节逆波兰计算器示例
- java - 使用 Comparator.reversed() 反转流的排序顺序
- c++ - C ++为什么删除指针时会出错?
- java - 构造函数不能应用于给定类型
- python - Kivy 透明帆布/背景
- java - Java正则表达式仅匹配签名中的方法名称
- sql-server - SQL Server 2019 可用性组侦听器:自动故障转移期间客户端连接的预期行为是什么?
- flutter - SliverHeader 行为管理