我正在使用Python语言中的mySQL,使用PyMySQL模块来处理连接。dbCursor是游标对象。
我有以下声明:
statement = f"INSERT INTO Machine_status (timestamp, num_of_char, STATUS, emergency_status) VALUES ({timestamp},{num_of_char},{status},{emergency_status})"
dbCursor.execute(statement)
但是,每当我尝试执行这条语句时,程序就挂起。这很令人费解,因为下面的语句与之类似:
statement = f"INSERT INTO Speed (timestamp, meters_per_second) VALUES ({timestamp}, {meters})"
dbCursor.execute(statement)
不会产生任何问题。第一个语句有什么问题?我真的不知道它会是什么样子。我检查并确保变量名匹配,我检查了数据库中的结构,以确保变量与列可以接受的内容匹配,确保没有额外的括号,语法正确,但在尝试执行语句时它继续挂起。令人沮丧的是,尝试直接在数据库中运行语句(使用phpMyAdmin)没有任何问题。这里发生了什么事?
EDIT1:增加了更多相关代码。
EDIT2:我已经尝试将其重新格式化为使用占位符(即值(%d,%d,%s,%d))。这并不能解决问题。
EDIT3:创建TABLE语句
"CREATE TABLE Machine_status (id AUTO_INCREMENT PRIMARY KEY, timestamp int, num_of_char int, status varchar(255), emergency_status int)"
完整的插入字符串
payload = item[0].split("{")[1].split("}")[0].split(" ") #returns a list containing everything between brackets of statement
timestamp = int(payload[0])
num_of_char = int(payload[1])
status = payload[2]
emergency_status = int(payload[3])
statement = "INSERT INTO Machine_STATUS (timestamp, num_of_char, STATUS, emergency_status) VALUES (%d, %d, %s, %d)"
try:
dbCursor.execute(statement, (timestamp, num_of_char, status, emergency_status))
print("Complete.")
except:
print("something went wrong")
EDIT4:我知道问题出在哪里了。pymysql在尝试提取错误代码时遇到了问题,所以我切换到了mysql.connector。它最终给了我一个错误“表找不到”。显然,我在代码中使用的表名与我在数据库中使用的表名不完全匹配,因此导致找不到该表。我改变了它,现在这个问题消失了。
转载请注明出处:http://www.heshunyou.com/article/20230526/1669126.html