Python 3.x 无法使用python、变量和自动增量插入mySQL数据库

Python 3.x 无法使用python、变量和自动增量插入mySQL数据库,python-3.x,raspberry-pi,mysql-python,Python 3.x,Raspberry Pi,Mysql Python,我希望我的格式是好的,因为这是我第一次使用stackOverflow 无论我如何改变我的代码和方法,在执行这段代码时,我总是会遇到同样的错误 文件“/usr/lib/python3/dist-packages/mysql/connector/cursor.py”, 第83行,在调用中 返回字节(self.params[index])索引器错误:元组索引超出范围 在处理上述异常期间,发生了另一个异常: 回溯(最近一次调用last):文件“sqlTest.py”,第40行,在 mycursor.ex

我希望我的格式是好的,因为这是我第一次使用stackOverflow

无论我如何改变我的代码和方法,在执行这段代码时,我总是会遇到同样的错误

文件“/usr/lib/python3/dist-packages/mysql/connector/cursor.py”, 第83行,在调用中 返回字节(self.params[index])索引器错误:元组索引超出范围

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用last):文件“sqlTest.py”,第40行,在 mycursor.execute(sql,val)文件“/usr/lib/python3/dist-packages/mysql/connector/cursor.py”,第558行, 执行中 stmt=RE_PY_PARAM.sub(psub,stmt)文件“/usr/lib/python3/dist packages/mysql/connector/cursor.PY”,第86行, 在中调用“SQL语句的参数不足”) mysql.connector.errors.ProgrammingError:没有足够的参数用于 SQL语句

这是我主要项目的一部分,它将记录某些变量的当前值以及GPS坐标和时间戳

从我所看到的情况来看,主要问题是数据库需要8个数据库条目,而我只需要7个

我主要遵循教程,因为我不太熟悉同时使用python和mySQL

#Initialize mySQL databse connection
mydb = mysql.connector.connect(
  host="themySQLserver.net",
  user="myUSername",
  passwd="_____",
  database="24totheTLE"
)
这些变量通常由主程序设置,但我手动设置它们以进行故障排除

top_since_epoch = 4
left_since_epoch = 1
bottom_since_epoch = 5
right_since_epoch = 3
这是调用python2脚本以获取gps数据的代码

fullgps = os.popen("python gps.py").read()
gps_split = fullgps.split(";")
gps_split[1] = gps_split[1].rstrip()
s1 = float(gps_split[0])
s2 = float(gps_split[1])
我的数据库的主键“LogNum”设置为自动递增,因此我在代码中没有提到它

ts = time.time()
timestam = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
mycursor = mydb.cursor()
sql = "INSERT INTO records (TimeStamp,CarsTop,CarsLeft,CarsRight,CarsBottom,GPSLong,GPSLat) VALUES (%s, %s, %s, %s, %s, %s, %s)"
val = [timestam,top_since_epoch,left_since_epoch,bottom_since_epoch,s2,s1]
mycursor.execute(sql,val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")

感谢所有回复的人。

终于找到了答案

问题是,我用来传递日期时间信息的代码没有设置为与“mysql.connector”交互,这通过更新代码以使用MySQLdb库解决了:

这个代码对我有用

#Initialize mySQL databse connection
mydb = MySQLdb.connect(
  host="sql24.cpt1.host-h.net",
  user="stonesp_1",
  passwd="______",
  database="24totheTLE"
)
print("5 minutes")
fullgps = os.popen("python gps.py").read()
gps_split = fullgps.split(";")

s1 = float(gps_split[0])
s2 = float(gps_split[1])
print(s1)
print(s2)
ts = time.time()
timecur = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print(timecur)
mycursor = mydb.cursor()

sql = "INSERT INTO records (TimeStamp,CarsTop,CarsLeft,CarsRight,CarsBottom,GPSLong,GPSLat) VALUES (%s,%s,%s,%s,%s,%s,%s)"
val = [timecur,top_since_epoch,left_since_epoch,right_since_epoch,bottom_since_epoch,s2,s1]

mycursor.execute(sql,val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")
mydb.close()

终于找到了答案

问题是,我用来传递日期时间信息的代码没有设置为与“mysql.connector”交互,这通过更新代码以使用MySQLdb库解决了:

这个代码对我有用

#Initialize mySQL databse connection
mydb = MySQLdb.connect(
  host="sql24.cpt1.host-h.net",
  user="stonesp_1",
  passwd="______",
  database="24totheTLE"
)
print("5 minutes")
fullgps = os.popen("python gps.py").read()
gps_split = fullgps.split(";")

s1 = float(gps_split[0])
s2 = float(gps_split[1])
print(s1)
print(s2)
ts = time.time()
timecur = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print(timecur)
mycursor = mydb.cursor()

sql = "INSERT INTO records (TimeStamp,CarsTop,CarsLeft,CarsRight,CarsBottom,GPSLong,GPSLat) VALUES (%s,%s,%s,%s,%s,%s,%s)"
val = [timecur,top_since_epoch,left_since_epoch,right_since_epoch,bottom_since_epoch,s2,s1]

mycursor.execute(sql,val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")
mydb.close()