我是Python腳本編程新手,當我將shell腳本轉換爲Python以進行Netezza DB調用時,一個存儲過程被調用傳遞參數。一切都按預期工作,並給出與Shell相同的結果。但在一種情況下,如果一個參數爲null,它將從Netezza表(Varchar字段)讀取該數據。在我測試該場景時並試圖打印結果讀取我有一個奇怪的錯誤,說''ascii'編解碼器不能編碼位置0-2字符:序號不在範圍(128)「。我試圖將值轉換爲字符串,但它是不工作。 附上腳本以供參考。 注:腳本可能不遵循Python的standards.Open任何改進建議代碼的Netezza表 pyodbc Netezza'ascii'編解碼器無法編碼位置0-2中的字符:序號不在範圍內(128)
try:
連接
try:
conn_str ="DRIVER={NetezzaSQL};SERVER="+results.host+";PORT=5480;DATABASE="+results.sugarDB+";UID="+results.username+";PWD="+results.password+""
print conn_str
conn_sugar = pyodbc.connect(conn_str,ansi=True)
cur_sugar = conn_sugar.cursor()
if (conn_sugar):
print "Connection successful"
except Exception, e:
print "Error while creating Netezza connection Error:",e
sys.exit(-1)
讀取數據檢查空參數列表暗淡
if str(results.dimList)=="":
print "dimlist is null"
var_query="select LP.DIMENSIONS AS DIMENSIONS from PICASO..LKP_PX_RECOMMEND_METADATA LP where LP.client_id="+results.clientID+""
print var_query
for row in cur_sugar.execute(var_query):
print "line no 62"
print row.DIMENSIONS
conn_sugar.commit();
else:
print "dimlist is not null",results.dimList
v=results.dimList
cur_sugar.execute("{exec SQLTOOLKIT..UDP_PRC_GET_MEDIAPLAN_RECOMMENDATION_3004("+results.clientID+","+results.configID+","+results.jobinstanceID+",'"+results.convBegin+"','"+results.convEnd+"','"+results.jaMeta+"','"+results.sugarDB+"','"+results.dimList+"','"+results.flag+"')}")
conn_sugar.commit();
conn_sugar.close();
except Exception, e:
print "procedure call failed!!! Error :",e
錯誤作爲
過程調用失敗!!!錯誤:ASCII「編解碼器在0-2位置無法編碼的字符:順序不在範圍內(128)
由於 Anoopř
感謝您的答覆。我會嘗試您給出的解決方案。我很困惑爲什麼varchar字段不可讀python odbc.Attached代碼以供參考。 –
我試過這個,它返回相同的錯誤'ascii'編解碼器不能編碼字符位置0-2:序號不在範圍內(128) –
@ScottMcG分享你的想法,如果你遇到同樣的問題 –