擅长:python、mysql、java
<p>你这里有两个问题,接近一个共同的安全漏洞。你知道吗</p>
<p>看起来您正在尝试使用<code>%</code>样式的替换来创建insert语句。我这么说是因为您在SQL字符串中引用了您的参数。这是一个<a href="https://en.wikipedia.org/wiki/SQL_injection" rel="nofollow noreferrer">really, really bad idea</a>:如果有人输入他们的地址,比如说,<code>');DROP TABLE STAGING; </code>,那么你最终将执行他们的SQL。相反,请使用SQL样式的占位符。它们看起来就像是文字,比如<code>VALUES (%s)</code>,而不是<code>VALUES ('%s')</code>。你知道吗</p>
<p>即使这些参数看起来像是要被%-替换,就像使用Python的<code>%</code>操作符一样,但它们不是。实际值将代替它们。所以,不要引用它们。你知道吗</p>
<p>但是,错误的原因是要使用的语句和参数是<code>cursor.execute</code>的两个独立参数。您当前将它们作为一个2长元组的单个参数传入。你知道吗</p>
<p>以下是固定版本:</p>
<pre><code>sql_insert_table = """INSERT INTO STAGING(ADRESSE_1600 ,
ADRESSE_1601, ADRESSE_1602, ADRESSE_1603)
VALUES (%s, %s, %s, %s)"""
file = csv.reader(file('20184329:2143.csv'))
for row in file:
cursor.execute(sql_insert_table, row)
</code></pre>
<p><img src="https://imgs.xkcd.com/comics/exploits_of_a_mom.png" alt="Her daughter is named Help I'm trapped in a driver's license factory."/></p>