【问题标题】:pypyodbc does not commitpypyodbc 不提交
【发布时间】:2018-09-24 12:58:18
【问题描述】:

我有一个 SQLServer TSQL 查询,它有多个 INSERT 语句,从非常基本到有些复杂。

此查询适用于 SQLServer Management Studio。

当我使用 Python pypyodbc 包并运行脚本时,脚本运行但不提交。我尝试过使用和不使用 commit() 函数。

BUT 如果我在最后指定一个 SELECT 语句,则脚本会提交插入。

所以一切都很好,因为它可以工作,但是我在所有脚本的末尾添加了一个不适用的 SELECT 语句。

有没有人知道如何在没有 SELECT 语句的情况下提交这些内容?我不想将查询拆分为多个查询。

谢谢!

    def execute_query(self,
                  query,
                  tuple_of_query_parameters,
                  commit=False,
                  return_insert_id=False,
                  return_results=True):
    self.open_cursor()

    try:
        self.connection_cursor.execute(query,
                                       tuple_of_query_parameters)

        result_set = None
        if return_results:
            if return_insert_id:
                result_set = self.connection_cursor.fetchone()[0]
            else:
                result_set = self.connection_cursor.fetchall()

            if commit:
                self.connection_cursor.commit()

    except pypyodbc.Error as e:
        print('Check for "USE" in script!!!')
        raise
    finally:
        self.close_cursor()

    return result_set

【问题讨论】:

  • 请编辑您的问题以包含mvce
  • 输入你的 Python 代码(请使用 MVCE)。根据您所写的 commit 应该可以解决问题,这可能只是一个小语法问题。
  • @sniperd 你可能是对的......我可能已经隐藏了提交功能。请查看我正在使用的执行代码。我将对其进行测试并报告。谢谢。

标签: python sql sql-server pypyodbc


【解决方案1】:

试试这个:

self.connection_cursor.execute(query,
                                   tuple_of_query_parameters)
if commit:
    self.connection_cursor.commit() #put commit here, immediately after execute

认为可以解决问题。

【讨论】:

  • 感谢您更正我的代码位置。这绝对应该位于查询的正下方。
  • 好的。所以我对此有一个非常重要的更新...... fetchone() 和 fetchall() 下方的位置是正确的!我花了最后一个小时试图检索我的 @@IDENTITY 值,但由于提交放在 fetch() 之前而无法做到这一点
  • @DonkeyKong 你可能想使用SCOPE_IDENTITY() 而不是@@IDENTITY 如果你只是想要你刚刚插入的PK,否则你可能得到别的东西:stackoverflow.com/questions/1920558/…
  • 你是二对二!
  • 但是,展示位置必须低于结果。我的原始代码中的事件顺序是正确的。
猜你喜欢
  • 2019-04-23
  • 2017-03-26
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多