Esempio n. 1
0
 def lock(cls, orderno, pid, sid_list):
     # 事物
     session = db.create_scoped_session()
     # query能直接放对象吗?<sql:query>标签用来运行SQL SELECT语句,
     # filter用类名.属性名,比较用==,filter_by直接用属性名,比较用=
     # rows 是链式调用返回的修改数
     rows = session.query(PlaySeat).filter(
         PlaySeat.pid == pid,
         # Seatstatus 自定义类方法
         PlaySeat.status == SeatStatus.ok.value,
         # sqlalchemy in语法查询,查询id 在一个list里的所有集合
         PlaySeat.sid.in_(sid_list)
     ).update(
         {
             'orderno': orderno,
             'status': SeatStatus.locked.value,
             'lock_time': datetime.now()
             # 属于 update 的参数 synchronize_session用于query在进行delete or update操作时,对session的同步策略。
             # False - 不对session进行同步,直接进行delete or update操作。
         },
         synchronize_session=False)
     if rows != len(sid_list):
         session.rollback()
         return 0
     session.commit()
     return rows
Esempio n. 2
0
 def buy(cls, orderno, pid, sid_list):
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.locked.value).update(
             {'status': SeatStatus.sold.value}, synchronize_session=False)
     if rows != len(sid_list):
         session.rollback()
         return 0
     session.commit()
     return rows
Esempio n. 3
0
 def refund(orderno, pid, sid_list):
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.sold.value).update(
             {
                 'status': SeatStatus.ok.value,
                 'orderno': None,
             },
             synchronize_session=False)  # 不同步
     if rows != len(sid_list):
         session.rollback()
         return 0
     session.commit()
     return rows
Esempio n. 4
0
 def buy(cls, orderno, pid, sid_list):
     """购买座位"""
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.locked.value).update(
             {
                 'status': SeatStatus.sold.value,
             }, synchronize_session=False)
     # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
     if rows != len(sid_list):
         session.rollback()
         return 0
     # 如果数量符合,则提交,并返回锁定的座位数量
     session.commit()
     return rows
Esempio n. 5
0
    def unlock(cls, orderno, pid, sid_list):  # 隔离错误
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno, status=SeatStatus.locked.value).update({
                'orderno':
                None,
                'status':
                SeatStatus.ok.value,
            })
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()

        return rows
Esempio n. 6
0
 def lock(cls, orderno, pid, sid_list):
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter(
         PlaySeat.pid == pid, PlaySeat.status == SeatStatus.ok.value,
         PlaySeat.sid.in_(sid_list)).update(
             {
                 'orderno': orderno,
                 'status': SeatStatus.locked.value,
                 'lock_time': datetime.now()
             },
             synchronize_session=False)
     if rows != len(sid_list):
         session.rollback()
         return 0
     session.commit()
     return rows
Esempio n. 7
0
    def print_ticket(cls, orderno, pid, sid_list):
        session = db.create_scoped_session()
        rows = session.query(PlaySeat).filter_by(
            orderno=orderno,
            status=SeatStatus.sold.value,
        ).update({
            "status": SeatStatus.printed.value,
        },
                 synchronize_session=False)

        if rows != len(sid_list):
            session.rollback()
            return 0

        session.commit()
        return rows
Esempio n. 8
0
 def print_tickets(cls, orderno, pid, sid_list):
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.sold.value
         # 把座位的状态码改了,订单号改为无
     ).update({
         'status': SeatStatus.ok.value,
         'orderno': None,
     },
              synchronize_session=False)
     # 如果操作数和 座位数长度不一样就回滚
     if rows != len(sid_list):
         session.rollback()
         # 返回的是0,
         return 0
     session.commit()
     return rows
Esempio n. 9
0
 def unlock(cls, orderno, pid, sid_list):
     # 创建一个db.session对象
     session = db.create_scoped_session()
     # 完成解锁操作
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.locked.value).update(
             {
                 "orderno": None,
                 "status": SeatStatus.ok.value,
             },
             synchronize_session=False)
     # 判断是否进行了解锁
     if rows != len(sid_list):
         session.rollback()
         return 0
     # 进行提交
     session.commit()
     return rows
Esempio n. 10
0
 def print_tickets(cls, orderno, pid, sid_list):
     """执行取票操作,修改座位状态"""
     session = db.create_scoped_session()
     rows = session.query(PlaySeat).filter_by(
         orderno=orderno, status=SeatStatus.sold.value).update(
             {
                 # 修改座位状态为正常,并将订单号设为空
                 'status': SeatStatus.printed.value,
                 # 'orderno': None,
             },
             synchronize_session=False)
     # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
     if rows != len(sid_list):
         session.rollback()
         return 0
     # 如果数量符合,则提交,并返回锁定的座位数量
     session.commit()
     return rows
Esempio n. 11
0
    def lock(cls, orderno, pid, sid_list):
        #创建数据库session
        session = db.create_scoped_session()
        # 查询出pid,status,sid符合锁定条件的座位
        rows = session.query(PlaySeat).filter(
            PlaySeat.pid == pid, PlaySeat.status == SeatStatus.ok.value,
            PlaySeat.sid.in_(sid_list)
            # 然后更新这些座位的信息
        ).update(
            {
                'orderno': orderno,
                'status': SeatStatus.locked.value,
                'locked_time': datetime.now()
            },
            synchronize_session=False)
        # 如果更新的行数量与我们传入的座位数量不符,则回滚,并返回0
        if rows != len(sid_list):
            session.rollback()
            return 0
        session.commit()

        return rows
Esempio n. 12
0
 def lock(cls, orderno, pid, sid_list):
     # 创建session
     session = db.create_scoped_session()
     # 直接对PlaySeat进行操作
     # 进行锁定操作,修改订单号和状态
     rows = session.query(PlaySeat).filter(
         PlaySeat.pid == pid,
         PlaySeat.status == SeatStatus.ok.value,
         PlaySeat.sid.in_(sid_list),
         #     进行修改
     ).update(
         {
             "orderno": orderno,
             "status": SeatStatus.locked.value,
             "lock_time": datetime.now()
             #    关闭同步session操作
         },
         synchronize_session=False)
     # 如果操作没有成功,执行rollback回滚
     if rows != len(sid_list):
         session.rollback()
         return 0
     session.commit()
     return rows