【问题标题】:Teradata MERGE yielding no results when executed through SQLAlchemy通过 SQLAlchemy 执行时,Teradata MERGE 不产生任何结果
【发布时间】:2017-07-11 14:18:52
【问题描述】:

我正在尝试使用 python 和 sqlalchemy 来下载一些数据,在 Teradata 服务器上创建一个临时临时表,然后将该表合并到我创建的另一个表中以永久存储这些数据。我正在使用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 组合有一些特定的东西?

【问题讨论】:

    标签: python sql sqlalchemy teradata sql-merge


    【解决方案1】:

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

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

    【讨论】:

    • 是的。完美运行。
    猜你喜欢
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多