从Python到MySQL上传数据失败

2024-04-20 07:09:22 发布

您现在位置:Python中文网/ 问答频道 /正文

下表是我的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%')")

它可以工作,我已经搜索了前面的问题

我加上那个不可打印的字了吗?还是另一个问题?你知道吗


Tags: 数据noexecutemysqlitemnullyesinsert
2条回答

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

所以如果你试着这样做:

query = ("INSERT INTO infor (temperature,wet) VALUES (%s,%s)")
temperature_item = '8.7`c'
wet_item = '0.87%'

cursor.execute(query, (temperature_item, wet_item))

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))

那就糟了。你知道吗

相关问题 更多 >