Что я использую
- Ubuntu 16.04
- Python 3,6
- FreeTDS, версия TDS 7.3
- SQLAlchemy 1.2.5
- 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, данные будут импортированы в таблицы назначения.
Сомнения
Есть ли вероятность того, что данные еще не были завершены при вставке в исходные таблицы при вызове хранимой процедуры?
Пожалуйста, помогите мне с этим делом.
Спасибо!