繁体   English   中英

动态 SQL 查询 WHERE 子句使用 pyodbc 最佳实践

[英]Dynamic SQL query WHERE clause using pyodbc best practice

我正在尝试生成一个 SQL 查询,例如

SELECT FirstName,
       LastName
 FROM Names  
 WHERE (FirstName LIKE '%FNameA%' OR FirstName LIKE '%FNameB%' ....OR FirstName LIKE '%FNameN%')
  AND (LastName LIKE '%LNameA%'OR LastName LIKE '%LNameB%'..... OR LastName LIKE '%LNameN%')

在 python 中动态运行,并使用 pyodbc 在 Microsoft SQL 服务器上运行它。 我只是想知道在这里避免 SQL 注入漏洞的最佳做法是什么。

例如,对于输入数量已知的查询,我可以使用绑定参数将任何输入转义到查询中

"SELECT * FROM mytable WHERE colx = ? AND coly = ?", (x, y).

有没有办法使用参数来构造具有任意数量的“Fnames”和“LNames”的第一个示例名称搜索查询?

你可以这样做

if($x){ $value[] = $x}

if($y{ $value[] = $y} 

$sql = "SELECT * FROM mytable WHERE colx = ? AND coly = ?";     

$stmt ->pdo->prepare($sql);  

$stmt->execute($value);

当您说应该使用绑定参数来防止 SQL 注入时,您是正确的。 如果需要,您可以在 for 循环中简单地构建 SQL:

firstNameSql = []
for name in firstNames:
    firstNameSql.append('FirstName like '%?%')

sql = "SELECT FirstName, LastName FROM Names WHERE (" + firstNameSql.join(' OR ') + ")"

虽然,我建议您研究一个功能更全的 ORM,它为您提供了一个查询生成器。 看看这个问题的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM