Python SQL insert语句不工作

Python SQL insert语句不工作,python,mysql,insert,Python,Mysql,Insert,我试图通过Python将Arduino数据插入到数据库中,但是,它不会这样做。基本上,我是分配从分配给Arduino的串行端口读取的数据,并将其第一个值存储在变量arduinoData中。在insert语句中,我试图使用字符串文字将arduinoData放入表中。代码如下: import mysql.connector from mysql.connector import errorcode from time import sleep import serial # Obtain conn

我试图通过Python将Arduino数据插入到数据库中,但是,它不会这样做。基本上,我是分配从分配给Arduino的串行端口读取的数据,并将其第一个值存储在变量
arduinoData
中。在insert语句中,我试图使用字符串文字将
arduinoData
放入表中。代码如下:

import mysql.connector
from mysql.connector import errorcode
from time import sleep
import serial

# Obtain connection string information from the portal
config = {
  'host':'oursystem.mysql.database.azure.com',
  'user':'project',
  'password':'',
  'database':'projectdb'
}

# Construct connection string
try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()
  ser = serial.Serial('/dev/ttyACM0', 9600) # Establish the connection on a specific port
  arduinoData=ser.read().strip()
  print arduinoData
  # Drop previous table of same name if one exists
  cursor.execute("DROP TABLE IF EXISTS ArduinoData;")
  print("Finished dropping table (if existed).")

  # Create table
  cursor.execute("CREATE TABLE ArduinoData (value VARCHAR(20));")
  print("Finished creating table.")

  # Insert some data into table
  cursor.execute("INSERT INTO ArduinoData (value) VALUES (%s);",(arduinoData))
  print("Inserted",cursor.rowcount,"row(s) of data.")


  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")

如果我把
%s
放在单引号中,比如
'%s'
,它只打印它,而不是我的
数据。任何人都能看到这里的错误,谢谢。

我可能把这个解释错了,但是,不应该有类似于
某些值='%s'
的东西,否则它不知道它在找什么。

我可能把这个解释错了,但是,不应该有类似于
的东西,比如某些值='%s'
,否则它不知道它在寻找什么。

只需传递一个元组
(arduinoData,)
,它意味着括号内的逗号表示单个值或列表
[arduinoData]
,而不是参数化中的单个值
(arduinoData)

cursor.execute("INSERT INTO ArduinoData (`value`) VALUES (%s);",(arduinoData,))
但是,如果arduinoData是多个值的列表,则使用,但仍传递列表。另外,escape
value
是一个MySQL:

只需传递一个元组
(arduinoData,)
,这意味着参数化中单个值或列表的括号内有一个逗号
[arduinoData]
,而不是单个值
(arduinoData)

cursor.execute("INSERT INTO ArduinoData (`value`) VALUES (%s);",(arduinoData,))
但是,如果arduinoData是多个值的列表,则使用,但仍传递列表。另外,escape
value
是一个MySQL:


我刚刚发现了问题所在,使用Parfait解析元组的建议,我刚刚将insert语句从
cursor.execute(“插入ArduinoData(值)值(%s);”,(ArduinoData))
更改为
cursor.execute(“插入ArduinoData(值)值(%s);”,(ArduinoData,))
感谢所有回答您问题的人,他们帮了大忙!:D

我刚刚发现了问题所在,使用帕菲的解析元组的建议,我刚刚将insert语句从
cursor.execute(“插入到ArduinoData(值)值(%s);”,(ArduinoData))
更改为
cursor.execute(“插入到ArduinoData(值)值(%s);”,(ArduinoData,))
感谢所有回答您问题的人,他们帮了大忙!:D

对此我不确定,我正在处理此链接上的insert语句->据我所知,您在%s之后指定的参数(如我的arduinoData)将用于代替%s。这就是我所想的,我看到的任何其他链接都会发现你的错误,(希望)有一个“;”在(%s)之后缺少“啊,谢谢,我没有注意到不幸的是,它没有修复它,它仍然告诉我在%s之后某处有一个错误:/您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“%s”附近使用的正确语法这是错误,请查看此处这可能会对您有所帮助我对此不确定,我正在处理此链接上的insert语句->据我所知,您在%s之后指定的参数(如my arduinoData)将替代%s。这就是我所想的,我看到的任何其他链接都会发现你的错误,(希望)有一个“;”在(%s)之后缺少“啊,谢谢,我没有注意到不幸的是,它没有修复它,它仍然告诉我在%s之后某处有一个错误:/您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“%s”附近使用的正确语法。这是一个错误,请查看此处。这可能有助于了解您的答案。我使用了元组解析,它标识正在从我的arduino检索一个数字,但不会存储它。我很确定它是把这个数字当作一个字符串。mysql.connector.errors.ProgrammingError:1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行使用接近“value”)值(“7”)的正确语法。这是它给我的错误,我将文本更改为%d,但这仍然没有改变任何内容。请显示arduino的长度和内容。我希望您使用的是反勾号,而不是单引号(正如我在错误输出中看到的那样)来转义值。arduino的长度实际上是来自超声波传感器的恒定数字流,我只取传感器给出的第一个数字,并将其输入数据库(用于测试)。我不太清楚“转义”值是什么意思?在MySQL之类的数据库和Python之类的语言中,有一些特定的关键字,如果使用这些关键字,将导致独特的行为,例如使用值。理想情况下,使用不同的名称。但是,如果您不这样做,您应该通过用反勾号括住标识符来转义该词,以告诉引擎“我的值”不是您的系统值。您的错误看起来像是使用了单引号而不是反勾号。谢谢您的回答,我使用了元组分析,它标识了正在从我的arduino检索一个数字,但不会存储它。我很确定它是把这个数字当作一个字符串。mysql.connector.errors.ProgrammingError:1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行使用接近“value”)值(“7”)的正确语法。这是它给我的错误,我将文本更改为%d,但这仍然没有改变任何内容。请显示arduino的长度和内容。我希望您使用的是反勾号,而不是单引号(正如我在错误输出中看到的那样)来转义值。arduino的长度实际上是来自超声波传感器的恒定数字流,我只取传感器给出的第一个数字,并将其输入数据库(用于测试)。我不太清楚你对我意味着什么