I have the following piece of code executing in a postgresql server.
from datetime import datetime
now = str(datetime.now(None))
procurementinsertqueries=[]
priceupdatequeries = []
inventoryupdatequeries=[]
ptrcode = -1
debugcode=""
try:
unpbatches=[]
query = "select distinct(fk_procurementbatch_code) from newprocurementlist"
proclistresult = plpy.execute(query)
for rec in proclistresult:
unpbatches.append(rec["fk_procurementbatch_code"])
for batchcode in unpbatches:
ptrcode=-1
query = "select procurementtransaction_code from procurement where fk_procurementbatch_code="+str(batchcode)+" order by procurementtransaction_code desc limit 1"
ptrcoderesult = plpy.execute(query)
if len(ptrcoderesult)==0:
ptrcode=0
else:
ptrcode=ptrcoderesult[0]["procurementtransaction_code"]
query = "select * from newprocurementlist where fk_procurementbatch_code="+str(batchcode)
newproclistresult = plpy.execute(query)
for r in newproclistresult:
ptrcode+=1
_bcode = str(r["fk_procurementbatch_code"])
_pref = str(r["fk_product_ref"])
_up = str(r["unitsprocured"])
_tp = str(r["totalprice"])
_cp = str(r["costprice"])
_sp = str(r["sellingprice"])
_mrp = str(r["mrp"])
_trcode = str(ptrcode)
procurementinsertqueries.append("insert into procurement values("+_bcode+","+_pref+","+_up+","+_tp+","+_cp+","+_sp+","+_mrp+","+_trcode+")")
priceupdatequeries.append("insert into productpriceupdatelist values("+_pref+")")
_aunits = 0.0
_newunits = 0.0
query="select unitsavailable from inventory where fk_product_ref="+_pref
au = -1
au = plpy.execute(query)
_aunits=float(au[0]["unitsavailable"])
_newunits = _aunits+float(r["unitsprocured"])
inventoryupdatequeries.append("update inventory set unitsavailable="+str(_newunits)+" where fk_product_ref="+_pref)
debugcode+="--Completed--"
debugcode+="---Loop completed---"
except Exception as e:
plpy.execute("insert into log values(\'"+now+"\')")
raise plpy.error("Error generating insert queries-->"+str(e)+"Debug is "+debugcode)
try:
with plpy.subtransaction():
for qry in procurementinsertqueries:
plpy.execute(qry)
for qry in priceupdatequeries:
plpy.execute(qry)
for qry in inventoryupdatequeries:
plpy.execute(qry)
except Exception as e:
plpy.execute("insert into log values(\'"+now+": Error executing insert queries\')")
raise plpy.error("Error executing procurement updates. There could be loss of data.Please review database error log. -->"+str(e))
try:
plpy.execute("delete from newprocurementlist")
except Exception as e:
plpy.execute("insert into log values(\'"+now+": Error deleting new procurement list table after successful updates\')")
raise plpy.error("Error deleting completed procurement list. There could be duplication of data. Review error log file-->"+str(e))
try:
plpy.execute("select product_price_update_process()")
except Exception as e:
raise plpy.error("Error updating prices. "+str(e))
The problem is that I am getting an "index out of range" error. Attached is the erro I am getting.
ERROR: plpy.Error: Error generating insert queries-->list index out of rangeDebug is --Completed--
CONTEXT: Traceback (most recent call last):
PL/Python function "procurementlist_process", line 61, in <module>
raise plpy.error("Error generating insert queries-->"+str(e)+"Debug is "+debugcode)
PL/Python function "procurementlist_process"
I am not able to understand how the index is out of range when I am using a for loop.
Please help !!
EDIT : Note that the test data in my table, the number of items in unpbatches is only 1.
raiseby itself in theexceptclause so we can see the actual traceback and line numbers.