通过 SQLAlchemy 执行时,Teradata MERGE 不产生任何结果

Teradata MERGE yielding no results when executed through SQLAlchemy

我正在尝试使用 python 和 sqlalchemy 下载一些数据,在 Teradata 服务器上创建临时暂存 table,然后将 table 合并到另一个 table 我创建它是为了永久存储这些数据。我正在使用 sql = slqalchemy.text(merge)td_engine.execute(sql),其中 merge 是类似于以下的字符串:

MERGE INTO perm_table as p
USING temp_table as t
ON p.Id = t.Id
WHEN MATCHED THEN
UPDATE
SET col1 = t.col1,
col2 = t.col2,
...
col50 = t.col50
WHEN NOT MATCHED THEN
INSERT (col1,
col2,
...
col50)
VALUES (t.col1,
t.col2,
...
t.col50)

脚本 运行 一直到最后都没有错误,并且 SQL 通过 Teradata Studio 正确执行,但由于某种原因 table 不会更新,当我通过 SQLAlchemy 执行它。但是,我也有 运行 不同的 SQL 表达式,例如从同一个 python 脚本填充 perm_table 的插入,它工作正常。也许有一些特定于 MERGE 和 SQLAlchemy 组合的东西?

由于您直接使用引擎,而不使用事务,您可能(除非您进行了看不见的配置)依赖于 SQLAlchemy 的 autocommit 版本,它通过检测数据更改操作来工作,例如如 INSERT 等。可能 MERGE 不是检测到的操作之一。尝试

sql = sqlalchemy.text(merge).execution_options(autocommit=True)
td_engine.execute(sql)