Я новичок в написании сценариев на Python, и когда я преобразовывал свои сценарии оболочки в Python для вызова Netezza DB, в котором хранимая процедура вызывается с переданными аргументами. Все работает так, как ожидалось, и дает результат такой же, как Shell. Параметр имеет значение null, он будет считывать эти данные из таблицы Netezza (поле Varchar). Пока я тестировал этот сценарий и пытался распечатать результат, прочитанный из, я получил странную ошибку, говорящую: «кодек ascii не может кодировать символы в позиции 0 -2: порядковый номер не в диапазоне (128). Я пытался преобразовать значение в строку, но это не работает. Прикрепляю скрипт для ознакомления. Примечание. Сценарий может не соответствовать стандартам Python. Принимайте любые предложения по улучшению кода.
связь
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)
чтение данных из таблицы Netezza
try:
проверка нулевого списка параметров dim
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)
Спасибо, Ануп Р.