【问题标题】:How do I resolve a connection pool handle = 1 error when using teradatasql in python?在 python 中使用 teradatasql 时,如何解决连接池句柄 = 1 错误?
【发布时间】:2021-11-06 06:40:04
【问题描述】:

我正在尝试使用 teradatasql 模块通过 Python 执行一些基本的 SQL。代码似乎运行并且 SQL 已执行:但是,Python 本身的执行以下面复制的代码结尾处的错误结束。目前,我需要在 SQL 的输出上使用 pandas 运行额外的数据预处理步骤,但较大的程序将不会继续超过操作错误(甚至不通过除 teradatsql.OperationalError 之外的 try/except 块)。因此,即使这个问题的 SQL 执行得很好,我也需要解决它。

有什么建议吗?谢谢!

错误:

teradatasql.OperationalError: 1 不是有效的连接池句柄

代码:

import teradatasql
import os
def refresh_table():
    usr = ****1
    with open(f'C:\\Users\\{usr}\\Documents\\my_td_password.txt', 'r') as my_pwd_f:
        pw = my_pwd_f.read()
    with teradatasql.connect(host = '*******2'
    , user = usr
    , password = pw
    ,  ) as con:
        with con.cursor() as cur:
            with open('C:\\Users\\****1\\Documents\\test.sql', 'r') as my_sql:
                sql_script = my_sql.read()
                for sql_block in sql_script.split(';'):
                    try:
                        cur.execute(sql_block)
                        print("Block executed")
                    except ValueError:
                        print("Failure to execute block: ValueError")
                    finally:
                        print(sql_block)
                my_sql.close()
                print("SQL file closed")
        con.close()
        print("Connection closed")

refresh_table()

【问题讨论】:

  • 您正在明确关闭 with 块内的连接。取出con.close()
  • 所以连接不需要显式关闭?目前缩进与连接块对齐
  • 哪个步骤抛出错误?
  • 正确。当with 用于创建对象时,退出块将自动处理它。就像您没有明确关闭或处置光标一样。这是给你这个错误的“双重关闭”。

标签: python sql database teradata teradatasql


【解决方案1】:

通过从末尾删除 con.close() 进行修复 - 正如 Fred 指出的那样,with 块在完成执行时隐式关闭连接

https://stackoverflow.com/users/11552426/fred

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 2017-08-14
    • 2020-11-19
    • 2020-08-02
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多