У меня есть фрейм данных, который я извлекаю из SQL, и SQL обновляется каждую минуту. Я пытаюсь отправить электронное письмо на основании определенного условия. Проблема заключается в том, что даже после выполнения определенного условия df
не обновляется, поскольку оно определено вне цикла while.
Я не могу включить df
в цикл while, поскольку я инициализирую df['Last_email_sent']
как None
, и если он находится в цикле while, это даст неправильные результаты. Если он находится внутри цикла while, он будет запускаться каждые 10 секунд, что неправильно. Если я добавлю его вне цикла while, он скажет, что не может найти столбец, так как имя не определено. Как мне избавиться от этой ситуации?
import pandas as pd
import numpy as np
import datetime
import time
import smtplib
import pyodbc
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
df = pd.read_csv(r'C:/Users/KrishnaKA/Desktop/Project/Test.csv', sep=',')
df['last_reported_at'] = pd.DatetimeIndex(df['last_reported_at'])
df['current_time'] = datetime.datetime.now() - pd.DateOffset(hours=8)
df['current_time'] = pd.to_datetime(df['current_time'], infer_datetime_format=True)
df['Current UTC Time'] = df['current_time'].dt.strftime('%d-%m-%Y %H:%M %p')
df['local time'] = datetime.datetime.now()
df['local time'] = df['local time'].dt.strftime('%d-%m-%Y %H:%M %p')
df['TD'] = df['current_time'] - df['last_reported_at']
TimeD = pd.DatetimeIndex(df['TD'])
df['TimeD'] = TimeD.hour * 60 + TimeD.minute
df['Time Difference'] = df['TimeD'].map(str) + " " "min(s)"
df['timeflag'] = df['TimeD'].apply(lambda x: '1' if x >= 15 else '0')
df['timeflag'] = df['timeflag'].astype(str).astype(int)
df = df.drop(
columns=['created_at', 'updated_at', 'source_read_id', 'current_time', 'TD', 'Current UTC Time'])
df['Last_email_sent'] = None
# Function to send email
def send_email(index):
print('email sent')
min = 2
while True:
for index in df.index:
now = datetime.datetime.now()
if df.loc[index, 'Time flag'] == 1 and df.loc[df.index[index], "Last_email_sent"] == None:
print('pass')
print(df.loc[index, 'Station ID'])
df.loc[df.index[index], "Last_email_sent"] = now
print(now)
minutes = divmod((now - df.loc[index, "Last_email_sent"]).total_seconds(), 60)[0]
# send_email(index)
elif df.loc[index, 'Time flag'] == 1 and minutes < min:
print('wait')
minutes = divmod((now - df.loc[index, "Last_email_sent"]).total_seconds(), 60)[0]
print(minutes)
print(df.loc[index, 'Station ID'])
elif df.loc[index, 'Time flag'] == 1 and minutes >= min:
# send_email(index)
print('sending email after 1 min')
print(df.loc[index, 'Station ID'])
df.loc[index, "Last_email_sent"] = now
print(minutes)
minutes = divmod((now - df.loc[index, "Last_email_sent"]).total_seconds(), 60)[0]
print(df['Time flag'])
else:
print('false')
time.sleep(10)