Я запускаю скрипт Python, который подключается к базе данных, получает один столбец, 6 строк длиной с целыми числами 0 или 1 или 2. Они помещены в переменные, и я хотел запустить оператор IF для конкретных условий, но оператор IF не будет работай.

Мои данные, поступающие из базы данных при распечатке, выглядят так.

[(0,), (0,), (0,), (0,), (0,), (0,)]

Мой скрипт результата на python ниже

def readDbHeating():

   cursor = mariadb_connection.cursor()
   result = []
   try:
       cursor.execute("SELECT control FROM house_DB")
       for reading in cursor.fetchall():
           result.append(reading)
   except () as e:
       print(e)
   return (result)

while 1:
   result = readDbHeating()
   print result

   waterState = result[0]
   denState = result[3]
   niamhState = result[4]
   downWCstate = result[5]

Оператор IF ниже не работает, когда waterState равен 0

   if(waterState == 0):
      print("here")
      flag = 0
      print("Water state = %s ") % waterState

Я попытался поставить 0 как "0", и я попытался преобразовать входящий результат для waterState в целое число, но я получаю ошибку, это кортеж

0
Steve8428 8 Мар 2020 в 02:45

2 ответа

Лучший ответ

waterState никогда не является 0: это всегда кортеж (набор значений в круглых скобках).

Когда вы получаете данные как [(0,), (0,), (0,), (0,), (0,), (0,)] и сохраняете их в results, у вас есть список из 6 кортежей.

waterstate = results[0] помещает значение (0,) в переменную waterstate; это кортеж, и он никогда не будет одним целым числом.

Если вы хотите взять только первое значение из кортежа, вам нужно пойти на один уровень глубже: waterstate = results[0][0].

Это выбирает первое значение кортежа на первом месте в списке:

[(0,), (0,), (0,), (0,), (0,), (0,)] -> (0,) -> 0.

1
Peritract 7 Мар 2020 в 23:58

Поскольку данные поступают как «0», а не «0», вы видели, работает ли это?

0
Alec 7 Мар 2020 в 23:48