You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy连接Teradata报错,如何开启自动提交解决?

解决SQLAlchemy连接Teradata事务不支持的问题

问题原因

Teradata的SQLAlchemy方言不支持通过create_engine的isolation_level参数配置自动提交,而默认连接模式会尝试开启事务,触发"Transactions are not supported"错误。

解决方案

方法1:在连接实例上开启自动提交

修改代码,获取连接后直接设置autocommit属性为True:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine(f"teradata://{UID}:{PWD}@host/?dsn={DSN}")
query = """SELECT TOP 10 * from db_5.mobile_sa"""

with engine.connect() as conn:
    conn.autocommit = True
    df = pd.read_sql(query, conn)

方法2:通过执行选项开启自动提交

在connect()方法中传入execution_options参数指定自动提交:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine(f"teradata://{UID}:{PWD}@host/?dsn={DSN}")
query = """SELECT TOP 10 * from db_5.mobile_sa"""

with engine.connect(execution_options={"autocommit": True}) as conn:
    df = pd.read_sql(query, conn)

方法3:使用Teradata原生驱动连接(备选)

若上述方法无效,可绕过SQLAlchemy连接池,直接使用Teradata原生驱动:

import pandas as pd
import teradata

udaExec = teradata.UdaExec(appName="test", version="1.0", logConsole=False)
session = udaExec.connect(method="odbc", dsn=DSN, username=UID, password=PWD, autocommit=True)

query = """SELECT TOP 10 * from db_5.mobile_sa"""
df = pd.read_sql(query, session)
session.close()

说明

Teradata的SQLAlchemy方言实现与标准SQLAlchemy存在差异,isolation_level并非通用配置项,因此需直接在连接实例上设置自动提交属性,或通过执行选项开启。

内容的提问来源于stack exchange,提问作者Kropiciel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:50:50