我有一个脚本,它启动时会启动与Teradata数据库的Pyodbc连接。 1小时20分钟后,脚本重新使用连接对象在Teradata上执行查询(使用pandas)。查询非常简单,我知道它是正确的,因为我已经手动测试了它。当脚本执行它时,我收到以下错误消息:
oData = pandas.read_sql(oQuery, oConnexion)
错误讯息:(, DatabaseError(" sql执行失败:SELECT DATA_QUALITY_INDICATOR \ n,DATA_QUALITY_INDICATOR_PARAMETER \ n
,DATA_QUALITY_INDICATOR_PARAMETER_VALUE \ n FROM 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_COMPLETENESS_DNA_EXPORT_COUNTER_VS_CSV_DATA' \ n AND DATA_QUALITY_INDICATOR_PARAMETER =' oMeasures'; \ n(' HY000',' The 驱动程序没有提供错误!')\ n \ n无法回滚",),)
虽然它不明确,但我认为执行失败是因为连接对象可能已经超时(注意在创建连接对象时没有设置超时)。你知道的方法:
由于
答案 0 :(得分:0)
我实现了以下解决方法,确认连接对象是超时问题。在重新使用连接对象之前,如果测试失败,我将测试并重新打开连接。
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']