django-background-task
django-background-task copied to clipboard
handling an exception during error
Hi i am handling an exception in a background_task. Running the code alone works fine, but when i want to run it as a background_task there is always an error message. It seems that handling an exception is not possible through a background_task. I want to set a status when the background_tasks failed, so i tried it with an exception. In this case i try to load something into a teradata table that does not exist to force an error and handle teh exception.
Here is my Code:
@background(schedule=0) def forced_load_schedule(id, user): #Identify user and send message #user = User.objects.get(pk=user_id) #user.email_user('Here is a notification', 'You have been notified') queryconfig = "SELECT * FROM ETL_config" queryloads = "SELECT * FROM ETL_load WHERE id ='" + str(id) + "'" teradatahost = '195.233.30.21' udaExec = teradata.UdaExec (appName="Toolbox2.0_ETL", version="1.0", logConsole=False) conn = sqlite3.connect('C:/inetpub/wwwroot/db.sqlite3') conn2 = sqlite3.connect('C:/inetpub/wwwroot/db.sqlite3')
#Get teradata user and etl configuration from SQLite database
df = pd.read_sql_query(queryconfig, conn)
for row in df.iterrows():
pos, d = row
teradatauser = d["Teradata_User"]
teradatapassword = d["Teradata_Password"]
etltimer = d["ETL_Timer"]
etlstatus = d["ETL_Status"]
runningindicator = d["ETL_Running_Indicator"]
df = pd.read_sql_query(queryloads, conn)
for row in df.iterrows():
pos, d = row
loadsql = d["Load_SQL"]
loadname = d["Name"]
loadid = d["id"]
etlgroup = d["ETL_Group"]
#Connect to teradata
with udaExec.connect(method="odbc",system=teradatahost, username=teradatauser,
password=teradatapassword, driver="Teradata") as connect:
now = str(datetime.now())[0:19]
#Execute load SQL
try:
curs = conn.cursor()
curs.execute("UPDATE ETL_load SET Trigger_Status = '1' WHERE id ='" + str(loadid) + "'")
conn.commit()
curs = connect.cursor()
curs.execute(loadsql)
curs = conn.cursor()
curs.execute("UPDATE ETL_load SET Load_Status = '1' WHERE id ='" + str(id) + "'")
curs.execute("UPDATE ETL_load SET Last_Load = '" + str(datetime.now()) + "' WHERE id ='" + str(id) + "'")
curs.execute("INSERT INTO log_log (Appname, Log_Title, Log_Message, Timestamp, Username) SELECT 'ETL_process' AS Appname, 'Info' AS Log_Title, 'Loadprocess " + loadname + " from ETL-Group " + etlgroup + " has been forced' AS Log_Message, '" + now + "' AS Timestamp, '" + user + "' AS Username")
conn.commit()
except Exception as e:
curs2 = conn2.cursor()
curs2.execute("UPDATE ETL_load SET Load_Status = '2' WHERE id ='" + str(id) + "'")
conn2.commit()
#Set ETL config Status back to 'active'
curs = conn.cursor()
curs.execute("UPDATE ETL_config SET ETL_Status = 'active'")
conn.commit()
conn.close()
My error message is this in the tasks table: Traceback (most recent call last): File "C:\inetpub\wwwroot\ETL\tasks.py", line 49, in forced_load_schedule curs = connect.cursor() File "C:\Python38-32\lib\site-packages\teradata\udaexec.py", line 745, in execute self._execute(self.cursor.execute, query, params, **kwargs) File "C:\Python38-32\lib\site-packages\teradata\udaexec.py", line 790, in _execute func(query, params, **kwargs) File "C:\Python38-32\lib\site-packages\teradata\tdodbc.py", line 614, in execute checkStatus(rc, hStmt=self.hStmt, method="SQLExecDirectW") File "C:\Python38-32\lib\site-packages\teradata\tdodbc.py", line 231, in checkStatus raise DatabaseError(i[2], u"[{}] {}".format(i[0], msg), i[0]) teradata.api.DatabaseError: (3807, "[42S02] [Teradata][ODBC Teradata Driver][Teradata Database] Object 'AVU_NL.TASHKKXAIADAD' does not exist. ")
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "C:\Python38-32\lib\site-packages\background_task\tasks.py", line 43, in bg_runner func(*args, **kwargs) File "C:\inetpub\wwwroot\ETL\tasks.py", line 60, in forced_load_schedule sqlite3.OperationalError: near ".": syntax error