【问题标题】:Transaction and Rollback in Snowflake Connector for Python适用于 Python 的 Snowflake 连接器中的事务和回滚
【发布时间】:2020-02-25 17:59:42
【问题描述】:

我正在使用适用于 Python 的 Snowflake 连接器,如下所示:

ctx = snowflake.connector.connect(user=username, password=password, account=account, warehouse=warehouse)
cs = ctx.cursor()
try:
 cs.execute(u"begin")
 cs.execute("TRUNCATE table1")
 cs.execute("TRUNCATE table2")
 cs.execute("TRUNCATE table3")
 ctx.commit()
except snowflake.connector.errors.ProgrammingError as e:
  ctx.rollback()
  print("ERROR" + e.msg)
finally:
  cs.close()
  ctx.close()

基本上,如果任何 SQL (TRUNCATES) 有任何问题,我想回滚。但是这段代码似乎没有回滚。

关于什么可能导致这种情况的任何想法?

【问题讨论】:

  • 你一定对雪花的Transaction部分感兴趣。但我认为你必须使用 DML 语句作为 DDL 截断并且有自己的自动提交事务,而不是你可以使用简单的删除。 link
  • @PIG,根据 Snowflake 文档,TRUNCATE 是一个 DML 命令:docs.snowflake.net/manuals/sql-reference/sql/…
  • 删除不能解决问题。 ?
  • TRANSACTION_ABORT_ON_ERROR 你把它设为 True 了吗?
  • 如何使用 Python 连接器设置 TRANSACTION_ABORT_ON_ERROR?

标签: python python-3.x transactions rollback snowflake-cloud-data-platform


【解决方案1】:

docs 开始,您必须将 autocommit 设置为 False 才能让 Rollback 工作,但是,即使设置了它,我也无法让它工作。请发表您的发现。

ctx = snowflake.connector.connect(autocommit=False,user=username, password=password, account=account, warehouse=warehouse)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2016-08-28
    • 1970-01-01
    相关资源
    最近更新 更多