存储过程无法通过SQLAlchemy在SQL Server中成功运行

时间:2018-05-13 03:25:14

标签: sql-server stored-procedures sqlalchemy python-3.6

我在使用什么

  1. Ubuntu 16.04
    • Python 3.6
    • FreeTDS,TDS Version 7.3
    • SQLAlchemy 1.2.5
  2. Windows server 2012
    • SQL Server 2008 Enterprise
  3. 我的目的

    我在Ubuntu机器上用Python编写代码以在MS SQL Server 2008上插入和执行存储过程。我为客户创建了一个订单。订单可能有许多主要成分,浇头。完成订单后,我运行存储过程来处理数据user_orderemployee_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_orderemployee_orderfinish_order也没有数据。

    但是,如果我在终端或SQL Studio Management中再次运行存储过程作为简单查询,则会将数据导入目标表。

    质疑

    当调用存储过程时,是否有可能数据尚未完成插入到源表中?

    请帮我解决此案。

    谢谢!

0 个答案:

没有答案