Как я могу вставить список от MySQL до Python? - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь получить данные датчика с Arduino на RPi через USB, прочитать их в Python и вставить в базу данных MySQL. Несмотря на то, что тип данных, который я пытаюсь вставить, явно является строкой, я получаю следующую ошибку:

«TypeError: должен быть строкой или буфером только для чтения, а не кортежем»

База данных который я пытаюсь реализовать, обычно имеет 6 значений с плавающей запятой и в конце 1 значения типа int, но, согласно другим источникам, они говорят, что какой бы тип ни был, данные должны отправляться в виде строки. Итак, что я могу сделать, чтобы решить эту проблему?

Моя база данных:

 +------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+

| humidity   | float   | YES  |     | NULL    |       |
| temperatur | float   | YES  |     | NULL    |       |
| lightlevel | float   | YES  |     | NULL    |       |
| airquality | float   | YES  |     | NULL    |       |
| lpg        | float   | YES  |     | NULL    |       |
| gas        | float   | YES  |     | NULL    |       |
| pir        | int(11) | YES  |     | NULL    |       |
+------------+---------+------+-----+---------+-------+

Вот мой код:

import serial
import mysql.connector
import MySQLdb

db = MySQLdb.connect(host = "localhost", user="root", passwd = "password", db = "sensordata")
cur = db.cursor()

ser = serial.Serial('/dev/ttyACM0',9600)


while 1:
        serread = ser.readline()
        a_list = serread.split()
        map_object = map(float, a_list)
        list_of_integers = list(map_object)
        sql = ("""INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)""", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))
        cur.execute(sql)
        db.commit()
        print(list_of_integers)
#       print(type(str(list_of_integers[0])))

Спасибо.

1 Ответ

0 голосов
/ 02 августа 2020

Вы получаете эту ошибку, потому что в следующей строке вы написали команду mysql в форме комментария, а не строки:

sql = ("""INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)""", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))

Попробуйте вместо этого использовать эту строку:

sql = ("INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))
...