擅长:python、mysql、java
<p>下面是一个例子:</p>
<pre><code>import MySQLdb
column = str(MySQLdb.escape_string(row[1]))
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column)
cursor2.execute(query, [row[3], row[0]])
</code></pre>
<p><strong>更新</strong></p>
<p>以下是简短的评论:</p>
<pre><code>column = str(MySQLdb.escape_string(row[1]))
</code></pre>
<p>避开任何进入查询的内容总是一个好主意。在这种情况下,我们将动态添加列名,因此在执行查询之前必须对其进行转义。</p>
<pre><code>query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column)
</code></pre>
<p>我在这里提出问题。我试图实现两件事:(1)使用前一行中声明的<code>column</code>变量填充列名,形成一个查询(2)添加占位符,这些占位符将在查询执行期间由实际参数填充。</p>
<p>片段<code>dict(column = column)</code>实际上是创建字典<code>{'column': column}</code>的另一种方式。这可以使用<a href="http://docs.python.org/library/stdtypes.html#typesmapping" rel="noreferrer">dict</a>构造函数实现。我不想
填写其他占位符,这样我就可以用两个百分号(<code>%%</code>)来逃避它们。</p>
<pre><code>cursor2.execute(query, [row[3], row[0]])
</code></pre>
<p>最后执行查询。如果在执行之前打印查询,您将看到字符串<code>update myTable set column_name = %s where ID = %s</code>。</p>