【发布时间】: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