Я пишу модуль для программы, которая должна прослушивать новые записи в БД и выполнять функцию в случае публикации новых строк в этой таблице ... иначе как триггер.
Я написал некоторый код, но он не работает. Вот моя логика c: подключиться к базе данных, запросить новую строку, сравнить эту строку с переменной, если она не равна, запустить функцию, сохранить новую строку в переменной, иначе закрыть. Запускайте каждые 2 секунды, чтобы сравнить новую строку с тем, что хранится в переменной / объекте.
Все работает нормально и получает ожидаемые результаты из БД, однако я получаю 'локальную переменную' last_sent ', на которую ссылаются до назначения. Это смущает меня по двум причинам.
Я думал, что я установил last_sent в 'none' как глобальную переменную / объект перед вызовом функций.
Для того, чтобы мои логи сравнения c работали, я не могу установить last_sent в функции sendListener () перед if / else
Вот код.
from Logger import Logger
from sendSMS import sendSMS
from Needles import dbUser, dbHost, dbPassword, pull_stmt
import pyodbc
import time
#set last_sent to something
last_sent = ''
def sendListener():
#connect to db
cnxn = pyodbc.connect('UID='+dbUser+';PWD='+dbPassword+';DSN='+dbHost)
cursor = cnxn.cursor()
#run query to pull newest row
cursor.execute(pull_stmt)
results = cursor.fetchone()
#if query results different from results stored in last_sent, run function.
#then set last_sent object to the query results for next comparison.
if results != last_sent:
sendSMS()
last_sent = results
else:
cnxn.close()
# a loop to run the check every 2 seconds- as to lessen cpu usage
def sleepLoop():
while 0 == 0:
sendListener()
time.sleep(2.0)
sleepLoop()
Я уверен, что есть лучший способ реализовать это.