Отправка значений в базу данных с помощью Python (проект SenseHAT)

0

У меня есть SenseHAT для моей малины PI 3, и я хочу отправить некоторые значения во внешнюю базу данных.

Вот мой .py файл:

import time
import pymysql.cursors
from sense_hat import SenseHat

sense = SenseHat()

temperature = round(sense.get_temperature(), 1)
pressure = round(sense.get_pressure(), 1)
humidity = round(sense.get_humidity(), 1)

connection = pymysql.connect(host='HOSTNAME',
                             user='USERNAME',
                             password='PASSWORD',
                             db='DATABASE',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:

        sql = "INSERT INTO data SET dat_date=%d, dat_time=%d, dat_temperature=%d, dat_pressure=%d, dat_humidity=%d, idx_sensor=%s"
        cursor.execute(sql, (time.strftime("%Y-%m-%d"),time.strftime("%H:%M:%s"),float(temperature),float(pressure),float(humidity),int(1)))

    connection.commit()
finally:
    connection.close()

sense.show_message("T:" + str(temperature) + " P:" + str(pressure) + " H:" + str(humidity), scroll_speed=0.7)

Моя проблема возникает во время выполнения SQL-запроса. Я создал в sql запрос, и я выполнил его в строке ниже, присвоив значения переменным. Однако у меня все еще появляется сообщение об ошибке, даже когда я изменяю тип значения для вставки (%s и %d).

Здесь значения:

  • dat_date => MySQL DATE (2017-12-11)
  • dat_time => MySQL TIME (15:44:54)
  • dat_temperature => Температура от SenseHAT (32.6)
  • dat_pressure => Давление от SenseHAT (654.98)
  • dat_humidity => Влажность из чувстваHAT (12.6)
  • idx_sensor => малина ПИ ID (1 в этом случае)

Здесь появляется сообщение об ошибке:

Traceback (most recent call last):
  File "sh_sr.py", line 22, in <module>
    cursor.execute(sql, (time.strftime("%Y-%m-%d"),time.strftime("%H:%M:%s"),float(temperature),float(pressure),float(humidity),int(1)))
  File "/home/pi/.local/lib/python2.7/site-packages/pymysql/cursors.py", line 164, in execute
    query = self.mogrify(query, args)
  File "/home/pi/.local/lib/python2.7/site-packages/pymysql/cursors.py", line 143, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: %d format: a number is required, not str

Итак, кто-нибудь видит, что я делаю неправильно?

(Это первый раз, когда я разрабатываю что-то с Python.)

Я использую Raspbian => последнюю версию 11.12.2017 и PyMySQL, установленную с помощью pip

Теги:
raspberry-pi
raspbian

1 ответ

2
Лучший ответ

добавьте простую цитату и используйте %s

sql = "INSERT INTO data SET dat_date='%s', dat_time='%s', dat_temperature=%s, dat_pressure=%s, dat_humidity=%s, idx_sensor=%s"
  • 0
    Я помещаю %s везде, и это работает ... Я не понимаю, когда нам нужно использовать %s или %d
  • 1
    Где нашли документ про %d ? Для меня мы можем использовать только %s : pymysql.readthedocs.io/en/latest/modules/cursors.html
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню