之前在项目开发当中遇到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("添加成功")
|