Форум сайта python.su
Добрый день, столкнулся с проблемой, программа анализирует в БД значение weight (в таблице всегда одна строка, но значение weight в ней меняется постоянно). Но программа показывает верное значение только при запуске, дальше в цикле только это значение и остается, хотя в БД значение меняется.
conn = pymysql.connect( host='localhost', user='user', password='password', database='db' ) cursor = db.cursor() while True: cursor.execute("SELECT weight FROM table LIMIT 1") result = cursor.fetchone() if result[0] > 2000: print("OK") break else: print("Restart") time.sleep(5) continue cursor.close() db.close()
Офлайн
import pymysql import time def check_weight(): conn = pymysql.connect( host='localhost', user='user', password='password', database='db' ) cursor = conn.cursor() while True: cursor.execute("SELECT weight FROM table LIMIT 1") result = cursor.fetchone() if result is None: # Handle no rows returned print("No weight found. Waiting...") time.sleep(5) continue if result[0] > 2000: print("OK") break else: print("Restart") time.sleep(5) continue cursor.close() conn.close() if __name__ == "__main__": check_weight()
Офлайн
Не совсем понял. У меня немного код изменился, можете помочь с обновлением данных \
import struct import sys import time import datetime import pymysql import pymysql.cursors import wiringpi as wp DB_CONFIG = { 'host': 'localhost', 'user': 'user', 'password': 'password', 'database': 'db' } # Пины для управления реле и кнопкой RELAY_PIN = 2 #пин реле BUTTON_PIN = 9 #пин кнопки # Установка соединения с базой данных connection = pymysql.connect(**DB_CONFIG) cursor = connection.cursor() # Инициализация WiringPi wp.wiringPiSetup() # Установка пина с реле в режим OUTPUT wp.pinMode(RELAY_PIN, wp.OUTPUT) # Установка пина с кнопкой в режим INPUT wp.pinMode(BUTTON_PIN, wp.INPUT) try: while True: # Выполнение запроса для получения значения веса из первой таблицы cursor.execute("SELECT MAX(weight) FROM table1") row1 = cursor.fetchone()[0] row1 = int( row1) if row1 is not None else 0 # Преобразование значения веса в целое число или 0, если значение None # Выполнение запроса для получения значения веса из второй таблицы cursor.execute("SELECT MAX(weight) FROM table2") row2 = cursor.fetchone()[0] row2 = int( row2) if row2 is not None else 0 # Преобразование значения веса в целое число или 0, если значение None # Проверка значений и управление реле if row1 > 2000 or row2 > 2000: # Включаем реле wp.digitalWrite(RELAY_PIN, wp.LOW) else: # Выключаем реле wp.digitalWrite(RELAY_PIN, wp.HIGH) # Проверка нажатия на кнопку для выхода из программы if wp.digitalRead(BUTTON_PIN) == wp.LOW: break finally: # Закрытие курсора, соединения с базой данных и очистка WiringPi cursor.close() connection.close() wp.pinMode(RELAY_PIN, wp.INPUT) wp.pinMode(BUTTON_PIN, wp.INPUT)
Офлайн
staxbelПопробуй внести открытие и закрытие курсора в тело цикла.
Но программа показывает верное значение только при запуске, дальше в цикле только это значение и остается, хотя в БД значение меняется.
Отредактировано py.user.next (Май 31, 2024 14:40:49)
Офлайн
py.user.nextСпасибо огромное, помогло
Офлайн