【发布时间】:2014-02-07 23:34:00
【问题描述】:
如何以安全的方式在 SQLAclhemy ORM 中进行不区分大小写的 IN 搜索?
我自己和我项目中的其他人都在寻找这个,但我们似乎找不到任何适合我们需要的东西。
在原始 SQL 中我可以做到:
SELECT * FROM TABLENAME WHERE UPPER(FIELDNAME) IN (UPPER('foo'), UPPER('bar'));
..如果 FOO 和 BAR 在未知情况下不是用户输入。事实上,我担心以下几点:
- 安全性:我不希望 Bobby Tables (http://xkcd.com/327/) 以 SQL 注入攻击的形式进行访问。我找不到告诉我如何在 SQLAlchemy 中转义字符串的文档,否则我会觉得加入更安全字符串(但仍然觉得这样做很脏)。
- 速度主要是通过索引来处理的,但显然,在发出查询之前在 RAM 中进行大小写更正比告诉数据库执行它要快,所以除非我真的必须这样做,否则我不会在查询中执行 UPPER。然而,以上是展示我想要做的最好的方式。但是 sti;;,它不应该做任何疯狂的事情。
- 平台无关代码。我将在多种数据库类型上运行它——如果我对此事有任何发言权,它将经过全面测试——而且我不希望查询绑定到特定的 SQL 对话框。毕竟,这就是我使用 SQLAlchemy 的原因。 :)
如果它有帮助,由于我们使用其他库,我们目前绑定到 8.4 版本的 SQLAlchemy。
【问题讨论】:
标签: python mysql sql sqlalchemy pyramid