Вставка кортежа, приводящего к ошибке: Недостаточно аргументов для строки формата - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь вставить данные, полученные через последовательный порт, в таблицу mysql, используя python 3, однако, когда я пытаюсь ввести свой оператор вставки, я получаю «TypeError: недостаточно аргументов для строки формата».Любая помощь будет принята с благодарностью!

Я попытался использовать ", (new_data)" вместо "% (new_data)" и получил ошибку синтаксиса SQL.Также попытался ".format(new_data)", который не выдал ошибку, но привел к пустым строковым полям или полям с плавающей запятой 0,00.

raw_data=ser.readline() #Fetch a line from the serial feed

new_data=raw_data.decode('ascii').rstrip()  #Remove extraneous control characters

new_data=(new_data, ) #Convert to a tuple

#Result
#("'2019-5-21 7:55:5',0,3.1,25.6,315,2.2,316,11.0,248,56.6,56.9,0.00,0.73,100375.50,4.37,0.83",)

#Now insert into the database
sql="INSERT INTO reports (rec_time, wnddir, wndspd, wndgust, wndgustdir, wndspdavg2m, wnddiravg2m, wndgustavg10M, wndgustdiravg10M, humidity, tempf, rain, raindly, pressure, battery, light) VALUES ('%s', '%d', '%f', '%f', '%d', '%f', '%d', '%f', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%f')" % (new_data)
cursor.execute(sql)

Я ожидаю, что запись будет записана в базу данных, однако я получаю «TypeError: недостаточно аргументов для строки формата».Есть 16 полей, 16 заполнителей и 16 частей данных.Что я делаю неправильно?

1 Ответ

0 голосов
/ 22 мая 2019

Имеется 16 полей, 16 заполнителей и 16 фрагментов данных.

new_data=(new_data, ) #Convert to a tuple

Нет, это просто 1-кортеж, а не 16-кортеж.

Рассмотрим этот пример:

>>> 6,
(6,)

Создает 1-кортеж, содержащий один шестой элемент.В вашем случае вы создали 1-кортеж, содержащий строку, в которой много символов, включая запятые.Но это все еще 1 кортеж, поэтому .format() по-прежнему ищет еще 15 аргументов.

Используйте модуль csv для перебора вашего входного файла, и вы будетенамного счастливее.

...