下表是我的字段
的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%')")
它可以工作,我已经搜索了上一个问题
我添加了不可打印的字吗?还是另一个问题?
答案 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))
这会很糟糕。