Хранимая процедура не может успешно работать в SQL Server через SQLAlchemy - PullRequest
0 голосов
/ 13 мая 2018

Что я использую

  1. Ubuntu 16.04
    • Python 3,6
    • FreeTDS, версия TDS 7.3
    • SQLAlchemy 1.2.5
  2. Windows server 2012
    • SQL Server 2008 Enterprise

Моя цель

Я пишу код на Python на машине с Ubuntu, чтобы вставить и выполнить хранимую процедуру на MS SQL Server 2008. Я создаю заказ для клиента. В заказе может быть много основных ингредиентов, начинки. По окончании заказа я запускаю хранимую процедуру для обработки данных до user_order и employee_order.

хранимая процедура

В хранимой процедуре, когда при выборе данных из исходных таблиц и данных процесса возникает какая-либо ошибка, транзакция откатывается.

Мой фрагмент кода

def process():
    engine = get_engine() # my method get engine by connection string
    session_maker = sessionmaker(bind=engine.execution_options(isolation_level='SERIALIZABLE'))
    session = session_maker()
    ref = 'REF0000001'
    try:
        # Create order
        order = Order(id=1, ref=ref)

        # Add main ingredients
        main1 = Main(order=1, name='coffee')
        main2 = Main(order=1, name='milk')

        # Topup
        topup1 = TopUp(order=1, name='cookies')
        topup2 = TopUp(order=1, name='chocolate')

        session.add(order)
        session.flush()

        session.add_all([main1, main2])
        session.flush()

        session.add_all([topup1, topup2])
        session.flush()

        session.commit()
    except:
        session.rollback()
        reraise
    finally:
        session.close()
        del session

    time.sleep(1)
    session = session_maker()
    session.execute('EXEC finish_order %a' % ref)
    session.commit()
    session.close()
    del session

И результат

Нет ошибки, но в user_order и employee_order нет данных, даже если запущена хранимая процедура finish_order.

Но, если я снова запустите хранимую процедуру в виде простого запроса в терминале или в SQL Studio Management, данные будут импортированы в таблицы назначения.

Сомнения

Есть ли вероятность того, что данные еще не были завершены при вставке в исходные таблицы при вызове хранимой процедуры?

Пожалуйста, помогите мне с этим делом.

Спасибо!

...