我在Ubuntu机器上用Python编写代码以在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中再次运行存储过程作为简单查询,则会将数据导入目标表。
当调用存储过程时,是否有可能数据尚未完成插入到源表中?
请帮我解决此案。
谢谢!