У меня возникла странная проблема при использовании пакета 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, я могу выполнять запросы так же хорошо, какИтак:
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
Я использую Python 3.7.3 и teradatasql 16.20.0.49 в Ubuntu (WSL) 18.04.
Возможно, не случайно я столкнулся с подобной проблемойпри попытке аналогичного рабочего процесса в 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]}')
У меня такое ощущение, что мне чего-то не хватает, но я нигде не могу найти решение этой проблемы.