Невозможно вставить в базу данных MySQL, используя python, переменные и auto_increment - PullRequest
1 голос
/ 25 сентября 2019

Я надеюсь, что мое форматирование в порядке, так как я впервые использую stackOverflow

Независимо от того, как я изменяю свой код и методы, я продолжаю получать ту же ошибку при выполнении этого кода

Файл "/usr/lib/python3/dist-packages/mysql/connector/cursor.py", строка 83, в вызов возврат байтов (self.params [index]) IndexError: индекс кортежа издиапазона

Во время обработки вышеупомянутого исключения произошло другое исключение:

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, в вызов " Недостаточно параметров для оператора SQL ") mysql.connector.errors.ProgrammingError: Недостаточно параметров для оператора SQL

Это раздел моего основного проекта, в котором будут записываться текущие значения cerПеременная tain, а также координаты 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.")

Спасибо всем, кто отвечает.

1 Ответ

0 голосов
/ 26 сентября 2019

Наконец нашел ответ

Проблема заключалась в том, что код, который я использовал для передачи информации о дате и времени, не был настроен для взаимодействия с «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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...