<p>这几乎是一个<a href="https://stackoverflow.com/q/283645/4799172">python list in sql query as parameter</a>的复制品,但缺少一些东西:</p>
<ol>
<li>您还有其他参数,而不仅仅是<code>IN</code>子句的参数,因此需要一些解包</li>
<li>关于某些SQL方言(例如SQLite)对<a href="https://stackoverflow.com/a/6582902/4799172">number of parameters you can pass</a>有限制这一事实的说明。你知道吗</li>
</ol>
<p>更正代码:</p>
<pre><code>cursor = conn.cursor()
membership_data = [1, 2]
placeholders = ', '.join(['?' for item in membership_data])
query = """
SELECT touchtonekey, COUNT(touchtonekey) AS touchedthismanytimes
FROM vw_callhandlertraffic
WHERE callhandlername = ? AND createddatetime BETWEEN ? AND ?
AND touchtonekey IN ({})
GROUP BY touchtonekey
ORDER BY touchtonekey
""".format(placeholders) # Add the placeholders to your IN clause
data = cursor.execute(query,
('My CallHandler',
'2019-10-09 13:00:00',
'2019-12-09 13:59:59',
*membership_data)) # Unpack the list
</code></pre>
<p>注意使用<code>*</code>,<a href="https://stackoverflow.com/questions/50950690/python-unpacking-operator">the "splat"/"unpacking" operator</a>来生成<code>execute</code>的参数的平面元组</p>