我希望我的格式可以,因为这是我第一次使用stackOverflow
无论我如何更改代码和方法,在执行此代码时我都会不断遇到相同的错误
文件“ /usr/lib/python3/dist-packages/mysql/connector/cursor.py”,call中的第83行返回字节(self.params [索引])IndexError:元组索引超出范围
在处理以上异常期间,发生了另一个异常:
追踪(最近一次通话):文件“ 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行,在call“ SQL语句的参数不足”中)mysql.connector.errors.ProgrammingError:参数不足SQL语句
这是我的主要项目的一部分,它将记录某些变量的当前值以及GPS坐标和时间戳。
根据我所看到的主要问题,与数据库有关,当我只需要7个数据库条目时,期望有8个数据库条目。
[我主要遵循https://www.w3schools.com/python/python_mysql_insert.asp教程,因为我对同时使用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="DD0DFrb7h59Dk1l9x4zU",
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()