Я пытаюсь сохранить самую последнюю строку данных из базы данных в переменных, используя python, однако скрипт сохраняет строку данных при исполнении, а не последний набор данных.
Ниже показан код для извлечения последней строки из базы данных.
База данных получает новую строку данных каждую минуту.
#!/usr/bin/env python
#import required modules
from time import sleep
import MySQLdb
#set MySQL Variables
host = "localhost"
user = "user"
password = "pass"
schema = "schema"
#connect to MySQL
db = MySQLdb.connect(host, user, password, schema)
curs = db.cursor()
#Define Sql Queries to Read the last Value in the Database
sqlT="SELECT temperature FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlH="SELECT humidity FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlIP="SELECT ip_address FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI1="SELECT DI1 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI2="SELECT DI2 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI3="SELECT DI3 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI4="SELECT DI4 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI5="SELECT DI5 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI6="SELECT DI6 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI7="SELECT DI7 FROM system_info ORDER BY pi_id DESC LIMIT 1"
sqlDI8="SELECT DI8 FROM system_info ORDER BY pi_id DESC LIMIT 1"
#Begin Script Infinitely
while True:
#Gather Values from Database
curs.execute(sqlT)
lastT = curs.fetchone()
for Temp in lastT:
temp_reading = Temp
curs.execute(sqlH)
lastH = curs.fetchone()
for Hum in lastH:
hum_reading = Hum
curs.execute(sqlDI1)
lastDI1 = curs.fetchone()
for DI1 in lastDI1:
DI1_reading = DI1
curs.execute(sqlDI2)
lastDI2 = curs.fetchone()
for DI2 in lastDI2:
DI2_reading = DI2
curs.execute(sqlDI3)
lastDI3 = curs.fetchone()
for DI3 in lastDI3:
DI3_reading = DI3
curs.execute(sqlDI4)
lastDI4 = curs.fetchone()
for DI4 in lastDI4:
DI4_reading = DI4
curs.execute(sqlDI5)
lastDI5 = curs.fetchone()
for DI5 in lastDI5:
DI5_reading = DI5
curs.execute(sqlDI1)
lastDI6 = curs.fetchone()
for DI6 in lastDI6:
DI6_reading = DI6
curs.execute(sqlDI1)
lastDI7 = curs.fetchone()
for DI7 in lastDI7:
DI7_reading = DI7
curs.execute(sqlDI8)
lastDI8 = curs.fetchone()
for DI8 in lastDI8:
DI8_reading = DI8
#Print Values
print(temp_reading)
print(hum_reading)
print(DI1_reading)
print(DI2_reading)
print(DI3_reading)
print(DI4_reading)
print(DI5_reading)
print(DI6_reading)
print(DI7_reading)
print(DI8_reading)
#Rest so Values change
sleep(61)
Результаты отображаются правильно для первой итерации цикла while, однако результат не обновляется до самого последнего набора данных из базы данных, он один раз сохранил данные строки в переменной и не обновляет переменную .
Что я получаю:
22
45
Open
Open
Open
Open
Open
Open
Open
Open
22
45
Open
Open
Open
Open
Open
Open
Open
Open
Что я ищу, чтобы получить:
22
45
Open
Open
Open
Open
Open
Open
Open
Open
25
56
Open
Open
Closed
Open
Open
Open
Open
Open
Заранее спасибо
EDIT
Добавление в пример записей таблицы к сопровождающему сообщению:
pi_id | time | ip_address | temperature | humidity | DI1 | DI2 | DI3 | DI4 | DI5 | DI6 | DI7 | DI8 |
5768 | 13:45 | 10.0.0.1 | 22 | 45 | Open | Open | Open | Open | Open | Open | Open | Open |
5769 | 13:46 | 10.0.0.1 | 25 | 56 | Open | Open | Closed | Open | Open | Open | Open | Open |
Я запускаю скрипт в 13:45, он собирает строку данных с pi_id: 5768 , затем через минуту в таблицу вводится новая строка данных, когда В то время как цикл в коде запускается снова, он печатает данные из pi_id: 5768 , а не из самых последних данных pi_id: 5769 , чего я и пытаюсь достичь.