【问题标题】:Unable to insert into mySQL database using python, variables and auto_increment无法使用 python、变量和 auto_increment 插入 mySQL 数据库
【发布时间】:2019-09-25 13:46:17
【问题描述】:

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

无论我如何更改我的代码和方法,在执行此代码时都会遇到相同的错误

文件“/usr/lib/python3/dist-packages/mysql/connector/cursor.py”, 第 83 行,在 调用 return bytes(self.params[index]) IndexError: tuple index out of range

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件“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 坐标和时间戳。

据我所知,主要问题与数据库预期 8 个数据库条目有关,而我应该只需要 7 个。

我主要是按照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】:

    终于找到答案了

    问题是我用来传递日期时间信息的代码没有设置为与“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()
    

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2017-10-27
      • 1970-01-01
      • 2019-01-19
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多