У меня проблема с тем, что python for
l oop преждевременно завершает работу. L oop выполняет итерацию по SQL записям базы данных по местоположению.
Если местоположение найдено, оно будет захватывать IP-адрес этих записей и отправлять конфигурацию. Если задание не выполняется или выдает исключение в моем случае, в рамках исключения оно будет go функцией обновления статуса, даты / времени. Ожидаемый результат в настоящее время является исключением.
Когда он возвращается к исходной функции, он выходит из l oop и не go к следующей записи БД (которая, я знаю, есть). Если я удаляю функцию изнутри исключения, то все работает нормально.
Текущие результаты. Это показывает, что l oop работает от функции к функции. Я должен увидеть дважды или 6 строк:
Return to Function,
Back to function,
Finished,
Return to Function,
Back to function,
Finished,
Вот что я получаю
1. IP
2. Status
3. Location
4. Main
Selection: 3
Location: Test
Return to Function,
Back to function,
Finished,
Код, показанный ниже:
def db_entry(Device, status):
int = 0
while int < 1:
c.execute('SELECT * FROM Automation WHERE Device=?', (Device,))
if bool(c.fetchone()) == True:
c.execute("UPDATE Automation SET Time=?, DateTime=?, Status=? WHERE Device=?"(time.strftime("%H:%M:%S +0000"), date.today(), status, Device))
mydb.commit()
int = int + 1
else:
c.execute("INSERT INTO Automation VALUES ('%s','NETCONF','POC', '%s', '%s', '%s')" % (Device, status, date.today(), time.strftime("%H:%M:%S +0000")))
mydb.commit()
int = int + 1
else:
print("Return to Function")
def send_single_configuration(file):
status_1 = "Success"
status_2 = "Fail"
print("\n")
view_database()
print("\n")
retries = 0
print("1. IP")
print("2. Status")
print("3. Location")
print("4. Main")
print("\n")
input_selection = input("Selection: ")
print("\n")
if input_selection == "3":
location = input("Location: ")
for row in c.execute('SELECT * FROM Automation WHERE Location=?', (location, )):
try:
m = manager.connect(row[0], 830, "cisco", "cisco", {'name': 'csr'})
config_file = open(file=file).read()
m.edit_config(config_file, target="running")
db_entry(row[0], status_1)
print("\n")
print("Configuration Complete!")
print("\n")
except AttributeError:
db_entry(row[0], status_2)
print("Back to function")
else:
print("Finished")
Traceback (most recent call last):
File "C:/Users/chris.oberdalhoff/PycharmProjects/Automation/venv/SQL.py", line 412, in <module>
main()
File "C:/Users/chris.oberdalhoff/PycharmProjects/Automation/venv/SQL.py", line 82, in main
snmp_configuration()
File "C:/Users/chris.oberdalhoff/PycharmProjects/Automation/venv/SQL.py", line 326, in snmp_configuration
send_single_configuration(SNMP_file)
File "C:/Users/chris.oberdalhoff/PycharmProjects/Automation/venv/SQL.py", line 395, in send_single_configuration
m.edit_config(config_file, target="running")
AttributeError: 'NoneType' object has no attribute 'edit_config'
Дополнительные тесты:
Если я удалю все, кроме оператора print, из функции db_entry, которая дала ожидаемый результат.
Я думаю, что-то с этой строкой кода или что-то еще с модулем / программой взаимодействия.
c.execute("UPDATE Automation SET Time=?, DateTime=?, Status=? WHERE
Device=?",(time.strftime("%H:%M:%S +0000"), date.today(), status,
Device))