从Python到MySQL上传数据失败

时间:2016-12-05 10:16:43

标签: python mysql python-3.x

下表是我的字段

的MySQL数据

名为infor

的表格
+-------------+-------------+------+-----+-------------------+----------------+
| Field       | Type        | Null | Key | Default           | Extra          |
+-------------+-------------+------+-----+-------------------+----------------+
| id          | bigint(7)   | NO   | PRI | NULL              | auto_increment |
| temperature | varchar(20) | YES  |     | NULL              |                |
| wet         | varchar(20) | YES  |     | NULL              |                |
| created     | timestamp   | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+-------------+------+-----+-------------------+----------------+

当我想将数据上传到我的MySQL服务器时

我使用以下代码:

temperature_item = '8.7`c'
wet_item = '0.87%'
cur.execute("INSERT INTO infor (temperature,wet) VALUES (temperature_item,wet_item)")

然后它显示以下错误:

  

pymysql.err.InternalError:(1054," Unknown column' wet_item' in' field list'")

但是当我输入时:

cur.execute("INSERT INTO infor (temperature,wet) VALUES ('87`c','8.7%')")

它可以工作,我已经搜索了上一个问题

我添加了不可打印的字吗?还是另一个问题?

3 个答案:

答案 0 :(得分:1)

"INSERT INTO infor (temperature,wet) VALUES (temperature_item,wet_item)"

这是一个python string literal。您的cur.execute语句完全等同于在mysql控制台中输入以下内容。

INSERT INTO infor (temperature,wet) VALUES (temperature_item,wet_item)

现在你在mysql中定义了wet_item吗?否则上述错误就是结果。

这也是一个字符串文字

"INSERT INTO infor (temperature,wet) VALUES ('87c','8.7%')"

但是在这里你将常量传递给mysql,它可以很容易地处理。如果你想将变量传递给mysql,那么正确的形式是

cur.execute("INSERT INTO infor (temperature,wet) VALUES(%s, %s)", (temperature_item,wet_item))

答案 1 :(得分:0)

我不太了解python,但是https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html,你执行它时似乎应该传递参数。

所以如果你试试这个:

<div class="inner cover">

  <ol type="A">
    <li><span id="full_tweet"></span></li><br>
    <li><span id="tweet_no_emoji"></span></li><br>
  </ol>  

  <form>
    <input type="radio" name="Class Tag" value="R">Redundant<br>
    <input type="radio" name="Class Tag" value="Non R">Non Redundant<br>
    <input type="radio" name="Class Tag" value="Non R + POS">Non Redundant + POS<br>
    <input type="submit" value="Submit">
  </form>

</div>

答案 2 :(得分:0)

Python在字符串中没有变量扩展。所以在

cur.execute("INSERT INTO infor (temperature,wet) VALUES (temperature_item,wet_item)")

Python 用它的值替换变量名。 (如果你想要的话,python怎么会知道呢?)

python中的一般解决方案是.format()方法:

s = "World"
print("Hello {}".format(s))

s替换大括号。

然而,在这个特定的实例中(使用数据库),更好的解决方案是

cur.execute("INSERT INTO infor (temperature,wet) VALUES(%s, %s)", (temperature_item,wet_item))

这是DB接口插入变量值的方式。 这是更好的方式,因为它也确保不会发生这种情况:

temperature_item = "87c"
wet_item = "8.7%'); DROP TABLE infor; --"
cur.execute("INSERT INTO infor (temperature,wet) VALUES('{}', '{}')".format(temperature_item, wet_item))

这会很糟糕。