Skip to content
This repository was archived by the owner on Feb 27, 2021. It is now read-only.
This repository was archived by the owner on Feb 27, 2021. It is now read-only.

handling an exception during error #34

@McMoe89

Description

@McMoe89

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions