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

时间:2017-02-21 19:22:21

标签: python sql sqlalchemy teradata sql-merge

我正在尝试将python与sqlalchemy一起使用来下载一些数据,在Teradata Server上创建临时登台表,然后将该表合并到我创建的另一个表中以永久存储此数据。我正在使用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正确执行,但由于某种原因,当我通过SQLAlchemy执行时,表不会更新。但是,我还运行了不同的SQL表达式,比如从同一个python脚本填充perm_table的插入,它运行正常。也许MERGE和SQLAlchemy组合有特定的东西?

1 个答案:

答案 0 :(得分:1)

由于您在不使用事务的情况下直接使用引擎,因此您可能(依赖于您看不见的配置)依赖于SQLAlchemy的autocommit版本,该版本通过检测INSERT等数据更改操作而起作用可能MERGE不是检测到的操作之一。尝试

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