【发布时间】:2023-03-31 03:25:01
【问题描述】:
我在使用 teradatasql 包(从 pypi 安装)时遇到了一个特殊问题。我使用以下代码(我们称之为 pytera.py)来查询数据库:
from dotenv import load_dotenv
import pandas as pd
import teradatasql
# Load the database credentials from .env file
_ = load_dotenv()
db_host = os.getenv('db_host')
db_username = os.getenv('db_username')
db_password = os.getenv('db_password')
def run_query(query):
"""Run query string on teradata and return DataFrame."""
if query.strip()[-1] != ';':
query += ';'
with teradatasql.connect(host=db_host, user=db_username,
password=db_password) as connect:
df = pd.read_sql(query, connect)
return df
当我在 IPython/Python 解释器或 Jupyter Notebook 中导入此函数时,我可以像这样运行查询:
import pytera as pt
pt.run_query('select top 5 * from table_name;')
但是,如果我将上述代码保存在 .py 文件中并尝试运行它,我大部分时间(并非所有时间)都会收到错误消息。错误信息如下。
E teradatasql.OperationalError: [Version 16.20.0.49] [Session 0] [Teradata SQL Driver] Hostname lookup failed for None
E at gosqldriver/teradatasql.(*teradataConnection).makeDriverError TeradataConnection.go:1046
E at gosqldriver/teradatasql.(*Lookup).getAddresses CopDiscovery.go:65
E at gosqldriver/teradatasql.discoverCops CopDiscovery.go:137
E at gosqldriver/teradatasql.newTeradataConnection TeradataConnection.go:133
E at gosqldriver/teradatasql.(*teradataDriver).Open TeradataDriver.go:32
E at database/sql.dsnConnector.Connect sql.go:600
E at database/sql.(*DB).conn sql.go:1103
E at database/sql.(*DB).Conn sql.go:1619
E at main.goCreateConnection goside.go:229
E at main._cgoexpwrap_e6e101e164fa_goCreateConnection _cgo_gotypes.go:214
E at runtime.call64 asm_amd64.s:574
E at runtime.cgocallbackg1 cgocall.go:316
E at runtime.cgocallbackg cgocall.go:194
E at runtime.cgocallback_gofunc asm_amd64.s:826
E at runtime.goexit asm_amd64.s:2361
E Caused by lookup None on <ip address redacted>: server misbehaving
我在 Ubuntu (WSL) 18.04 上使用 Python 3.7.3 和 teradatasql 16.20.0.49。
也许并非巧合,我在 Windows 上尝试类似的工作流程时遇到了类似的问题(使用 teradata 包和安装的 Teradata Python 驱动程序)。当我在解释器或 Jupyter 中连接时工作,但在脚本中不工作。在 Windows 的情况下,错误是:
E teradata.api.DatabaseError: (10380, '[08001] [Teradata][ODBC] (10380) Unable to establish connection with data source. Missing settings: {[DBCName]}')
我觉得我缺少一些基本的东西,但我在任何地方都找不到解决方案。
【问题讨论】:
标签: python sql teradata dotenv