无法使用python,变量和auto_increment插入mySQL数据库

问题描述 投票:1回答:1

我希望我的格式可以,因为这是我第一次使用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.")

感谢任何回复。

python-3.x raspberry-pi mysql-python
1个回答
0
投票

最终找到答案

问题是,我用于传递日期时间信息的代码未设置为与“ 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()
© www.soinside.com 2019 - 2024. All rights reserved.