Chin的博客

程序的世界多奇妙

Tornado+sqlalchemy的事务管理

      之前在项目开发当中遇到tornado+sqlalchemy的事务问题,一直没有时间没去解决。现在空下来了,考虑怎么解决这个问题。

      众所周知,diango里有自己的middleware来做事务的管理,tornado是不是也能做自己的middelware呢来完成这件事情呢?经过研究,自己来实现tornado的middleware还是比较复杂的。不过网上有牛人写了一个,tmiddelware。除此以外,使用装饰器是实现也是事务管理一种比较简便的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
     def transactional(baseSession):
         def transaction(func):
             def __decorator(obj,*args,**kwargs):
                 session = baseSession()
                 try:
                     func(obj,session,*args,**kwargs)
                     session.commit()
                 except Exception,e:
                     session.rollback()
                 finally:
                     session.close()
             return __decorator

         return transaction

     @transactional(BaseSession)
     def get(self,session,*args,**kwargs):
         city = BaseCity(name="添加城市")
         org = BaseOrg(name="添加组织")
         session.add(city)
         session.add(org)
         self.write("添加成功")

Comments