擅长:python、mysql、java
<p>这是cursor.execute的调用签名:</p>
<pre><code>Definition: cursor.execute(self, query, args=None)
query -- string, query to execute on server
args -- optional sequence or mapping, parameters to use with query.
</code></pre>
<p>因此execute最多需要3个参数(args是可选的)。
如果给定args,则它应该是一个序列。
所以</p>
<pre><code>sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)
</code></pre>
<p>不会起作用的,因为</p>
<pre><code>cursor.execute(*sql_and_params)
</code></pre>
<p>将元组sql_和_params展开为4个参数(同样,execute只需要3个参数)。</p>
<p>如果你真的必须使用</p>
<pre><code>sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
</code></pre>
<p>当你把它喂给<code>cursor.execute</code>时,你必须把它分开:</p>
<pre><code>cursor.execute(sql_and_params[0],sql_and_params[1:])
</code></pre>
<p>但我觉得用两个变量更让人愉快:</p>
<pre><code>sql = "INSERT INTO table VALUES (%s, %s, %s)"
args= var1, var2, var3
cursor.execute(sql, args)
</code></pre>