pypyodbc не фиксирует

1

У меня SQLServer TSQL-запрос, который имеет несколько инструкций INSERT, которые варьируются от довольно простых до нескольких сложных.

Этот запрос работает в SQLServer Management Studio.

Когда я использую пакет pypyodbc Python и запускаю скрипт, скрипт запускается, но не фиксирует. Я попытался с и без функции commit().

НО, если я укажу инструкцию 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
  • 2
    Пожалуйста, отредактируйте ваш вопрос, чтобы включить mvce .
  • 0
    Вбросьте свой код Python (пожалуйста, MVCE). Из того, что вы написали, commit должен сделать свое дело, это, вероятно, просто небольшая синтаксическая проблема.
Показать ещё 1 комментарий
Теги:
sql-server
pypyodbc

1 ответ

2
Лучший ответ

Попробуй это:

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

Я думаю, что это сделает трюк.

  • 0
    Спасибо за исправление размещения моего кода. Это определенно должно быть расположено непосредственно под запросом.
  • 0
    ХОРОШО. Итак, у меня есть очень важное обновление по этому вопросу ... размещение НИЖЕ fetchone () и fetchall () ПРАВИЛЬНО! Я провел последний час, пытаясь получить мое значение @@ IDENTITY, и не смог этого сделать из-за фиксации, помещенной перед fetch ()
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню