Ошибка при вставке переменной Python в таблицу mysql

#python #mysql #raspberry-pi

#python #mysql #raspberry-pi

Вопрос:

Я работаю над проектом raspberry pi, в котором я извлекаю данные из plc и сохраняю их в базе данных mysql.

Вот мой код:

 import minimalmodbus
import serial
import mysql.connector


instrument = minimalmodbus.Instrument('/dev/ttyAMA0',3,mode='rtu')
instrument.serial.baudrate=115200
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.bytesize = 8
instrument.serial.stopbits = 1
instrument.serial.timeout = 0.05


con = mysql.connector.connect(user='root',password='raspberry',host='localhost',
                              database='Fujiplc')

cursor = con.cursor()

try:
    reg_value=instrument.read_register(102)
    print reg_value
    cursor.execute("insert into Register_Values values(%s)",(reg_value))
    print ('One row inserted successfully.')
except IOError:
    print("Failed to read from PLC.")


print (cursor.rowcount)

con.commit()

cursor.close()

con.close()
  

После запуска этого кода я получаю следующую ошибку:

 Traceback (most recent call last):
  File "/home/pi/rpi_to_plc_read.py", line 22, in <module>
    cursor.execute("insert into Register_Values values(%d)",(reg_value))
  File "/usr/local/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 477, in execute
    stmt = operation % self._process_params(params)
  File "/usr/local/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 355, in _process_params
    "Failed processing format-parameters; %s" % err)
ProgrammingError: Failed processing format-parameters; argument 2 to map() must support iteration
  

Я прошел через множество решений, но проблему не смог решить.
Пожалуйста, помогите мне.

Комментарии:

1. 152 — это данные, которые программа извлекла из plc.

2. я также пробовал %d вместо %s

Ответ №1:

я думаю, должно быть.

 cursor.execute("insert into Register_Values values(%s)",(reg_value))
con.commit()
  

Ответ №2:

Довольно распространенная ошибка в python.

(reg_value) не является кортежем (reg_value,) является кортежем