我有一个脚本,该脚本在启动时启动了与Teradata数据库的PYODBC连接。1H20分钟后,脚本将连接对象重复执行Teradata上的查询(使用PANDAS(。查询非常简单,我知道这是正确的,因为我已经手动对其进行了测试。脚本执行它时,我会收到以下错误消息:
oData = pandas.read_sql(oQuery, oConnexion)
错误消息:(,, 数据库("执行在SQL上失败:选择 data_quality_indicator n,data_quality_indicator_parameter n
,data_quality_indicator_parameter_value n从 audit_views.audit_data_quality_indicator_parameter a n加入 Audit_views.audit_data_quality_indicator b on a.data_quality_indicator_key = b.data_quality_indicator_key n
在哪里 data_quality_indicator ='data_completes_dna_export_counter_vs_csv_data' n 和data_quality_indicator_parameter ='omeasures'; n('hy000',' 驱动程序未提供错误!
尽管它不是明确的,但我认为执行失败是因为连接对象可能已经过时了(请注意,创建连接对象时没有设置时间(。您知道一种方法:
- 在整个过程中保持连接对象的活力?
- 测试连接对象是否仍然有效事先执行查询?
谢谢
我实施了以下解决方法,这确认这是连接对象的超时问题。在重复连接对象之前,我要测试并重新打开连接,如果测试失败。
import pyodbc
try:
#test current connection object in global variable
oConnexion = oGlobalVariable['oConnexion']
oCursor = oConnexion.cursor()
oCursor.execute("select '1'")
oCursor.close()
except:
#if test fails re-open connection
oConnexionString = fGetParameterFile(pFileName="global_parameter.ini", pSectionName="AUDIT", pParameterName="oConnexionString")
oConnexion = pyodbc.connect(oConnexionString, autocommit=True)
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
oConnexion.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-8')
oConnexion.setencoding(encoding='utf-8')
oGlobalVariable['oConnexion'] = oConnexion
return oConnexion
else:
return oGlobalVariable['oConnexion']