Не удается вставить Python3 в MariaDB - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу вставить данные с метеостанции Alecto WS-1200, которые я прочитал на моем Raspberry Pi 3 с помощью программного обеспечения RF Link, работающего на мегапикселе Arduino, подключенном к RPI через USB.

Я вижу вphpmyadmin, что ни одна строка не вставлена ​​и БД пуста.

Вот мой код:

import mysql.connector as mariadb
import serial

#Initialization
ser = serial.Serial(port='/dev/ttyUSB0', baudrate=57600)

#Read sensor
while True:
   readBytes = ser.readline()
   line = readBytes.decode("utf-8")
   print(line)
   list = line.split(";")
   if list[2] == "Alecto V5":
      rain = list[5].split("RAIN=", 1)[1]
      rainFloat = float.fromhex(rain)
      rainFloat = rainFloat / 10
      mariadb_connection = mariadb.connect(host='localhost', user='test', password='test', database='test')
      cursor = mariadb_connection.cursor()

      try:
         cursor.execute("SELECT interpolated FROM rain_data ORDER BY created_at DESC LIMIT 1")
         result = cursor.fetchone()
         if result is not None:
            previousVal = result[0]
            if rainFloat - previousVal >= 0:
               interpolated = rainFloat - previousVal
               cursor.execute("INSERT INTO rain_data (interpolated, raw_value) VALUES (%s, %s)", interpolated, rainFloat)
            else:
               cursor.execute("INSERT INTO rain_data (interpolated, raw_value) VALUES (%s, %s)", rainFloat, rainFloat)
         else:
            cursor.execute("INSERT INTO rain_data (interpolated, raw_value) VALUES (%s, %s)", rainFloat, rainFloat)
            print(cursor.rowcount)
      except mariadb.Error as error:
         print("Error: {}".format(error))
      finally:
         mariadb_connection.commit()
         mariadb_connection.close()

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

Последовательное соединение просто возвращает строку, например, 20; 00Alecto V5; Temp = 07d; BAT = OK; RAIN = 03f Как вы видите, я форматируюэто просто для извлечения шестнадцатеричного значения дождя, чтобы вставить его в базу данных.

Чего мне не хватает?

1 Ответ

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

Ладно, это действительно просто: я просто забыл скобки вокруг значений оператора вставки.

Изменение этой строки:

cursor.execute("INSERT INTO rain_data (interpolated, raw_value) VALUES (%s, %s)", rainFloat, rainFloat)

Чтобы с этим справиться:

cursor.execute("INSERT INTO rain_data (interpolated, raw_value) VALUES (%s, %s)", (rainFloat, rainFloat))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...