使用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
相关产品推荐
相关产品推荐

