测试PYODBC连接对象



我有一个脚本,该脚本在启动时启动了与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']

相关内容

  • 没有找到相关文章

最新更新