@willdes

Почему не выполняется SQL запрос повторно в while?

Писал скрипт, который берет значения из бд и присваивает их состоянию gpio rasbperry pi. Но столкнулся с проблемой, что запрос не выполняется повторно с каждым прохождением цикла.. БД меняю руками из workbanch'a, а значения в скрипте не меняются..
Код:
while True:
	print("OUT1")
	cursors = db.cursor()
	w = cursors.execute("SELECT numb FROM gpio WHERE type='out' and value=1")
	cursors.execute("SELECT numb FROM gpio WHERE type='out' and value=1")
	dataa =  cursors.fetchall()
	for d in range(w):
		rowc = dataa[d]
		idlegs = rowc[0]
		GPIO.output(idlegs, 1)
		print("set OUT", idlegs, "= 1")
	print("OUT0")
	time.sleep(1)	
	cursora = db.cursor()
	j = cursora.execute("SELECT numb FROM gpio WHERE type='out' and value=0")
	cursora.execute("SELECT numb FROM gpio WHERE type='out' and value=0")
	datal =  cursora.fetchall()
	print(j)
	print(datal)
	for l in range(j):
		rowj = datal[l]
		idlegj = rowj[0]
		GPIO.output(idlegj, 0)
		print("set OUT", idlegj, "= 0")
	time.sleep(2)
	print("wait")


Вывод в консоли:
wait
OUT1
set OUT 3 = 1
set OUT 5 = 1
set OUT 11 = 1
set OUT 12 = 1
set OUT 13 = 1
set OUT 15 = 1
set OUT 16 = 1
set OUT 18 = 1
set OUT 19 = 1
set OUT 21 = 1
set OUT 22 = 1
set OUT 23 = 1
OUT0
0
()
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
@CrazyElf
А если закомментировать всё, что в первой половине цикла, то вторая половина выполняется?
У меня подозрение, что менять вы меняете, но изменения не коммитятся и видны только в том клиенте, где меняете.
Так то у вас непонятно зачем селекты повторяются и циклы странно организованы, наверное, где-то не то скопировано.
Но на логику выполнения цикла это не должно влиять.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alexhott
попробуйте после обработки удалять объекты
Ответ написан
Комментировать
@willdes Автор вопроса
Теперь такой вывод
OUT1
set OUT 3 = 1
set OUT 5 = 1
set OUT 11 = 1
set OUT 12 = 1
set OUT 13 = 1
set OUT 15 = 1
set OUT 16 = 1
set OUT 18 = 1
set OUT 19 = 1
set OUT 21 = 1
set OUT 22 = 1
set OUT 23 = 1
OUT0
wait

скрипт исправил
while True:
	print("OUT1")
	cursor = db.cursor()
	w = cursor.execute("SELECT numb FROM gpio WHERE type='out' and value=1")
	cursor.execute("SELECT numb FROM gpio WHERE type='out' and value=1")
	data =  cursor.fetchall()
	for d in range(w):
		row = data[d]
		idleg = row[0]
		GPIO.output(idleg, 1)
		print("set OUT", idleg, "= 1")
		del row
		del idleg
	del data
	del cursor
	del w
	print("OUT0")
	cursor = db.cursor()
	w = cursor.execute("SELECT numb FROM gpio WHERE type='out' and value=0")
	cursor.execute("SELECT numb FROM gpio WHERE type='out' and value=0")
	data =  cursor.fetchall()
	for d in range(w):
		row = data[d]
		idleg = row[0]
		GPIO.output(idleg, 0)
		print("set OUT", idleg, "= 0")
		del row
		del idleg
	del data
	del cursor
	del w
	time.sleep(2)
	print("wait")


в БД поставил значения поля value=0 на 3 и 15 numb
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы