擅长:python、mysql、java
<h3>只有在确定查询字符串是安全的情况下才执行此操作。</h3>
<p>(编辑:你真的应该用<a href="http://pyparsing.wikispaces.com/" rel="nofollow noreferrer">pyparsing</a>之类的东西,而不是做一些又快又脏的事情。)</p>
<p>如果源来自不受信任的输入,则不要对查询字符串使用<code>exec</code>。在</p>
<pre><code>import re
QUERY_EXEC_RE = re.compile('(\w+)=')
def _matches(query_exec, d):
a = []
exec('a.append({0})'.format(query_exec), globals(), locals())
return a[0]
def query_dicts(query, dicts):
query_exec = QUERY_EXEC_RE.sub(r'd.get("\1") == ', query)
return [d for d in dicts if _matches(query_exec, d)]
</code></pre>
<p>示例:</p>
^{pr2}$