mysql - python开发web service 中数据库链接和释放应该怎么处理?
问题描述
用tornado开发web service服务。服务端根据接收到的json数据对mysql数据库进行查询,并把结果反馈给用户。采用sqlalchemy对数据库进行操作,以下对数据库链接的创建,释放是否合理呢?
class db: def __init__(self,db_ip=’’,db_name=’’,db_user=’’,db_pass=’’,db_charset=’’):self.db_str = ’mysql+pymysql://’+db_user+’:’+db_pass+’@’+db_ip+’:3306/’+db_name+’?’+’charset=’+db_charsetself.engine = create_engine(self.db_str, encoding=’utf-8’, echo=False)self.dbsession = sessionmaker(bind=self.engine) def return_dbsession(self):return self.dbsession def close_session(self):self.session.close()
database = db(db_ip=’127.0.0.1’, db_name=’data_utf’, db_user=’root’, db_pass=’root’, db_charset=’utf8’)
处理post请求代码如下
class rcvRequest(tornado.web.Request): session = scoped_session(database.return_dbsession())() response = [] for ctt in session.query(table).filter(table.ID == id):response.append(ctt) self.write(str(response)) session.close()
问题解答
回答1:不合理,每来一次请求就建立一次连接不是很浪费吗?sqlalchemy可以很好的帮你管理连接池,找找资料,用连接池吧.
回答2:代码调整为以下这种方式是否合理?
def db(db_ip=’’,db_name=’’,db_user=’’,db_pass=’’,db_charset=’’):db_str = ’mysql+pymysql://’+db_user+’:’+db_pass+’@’+db_ip+’:3306/’+db_name+’?’+’charset=’+db_charsetengine = create_engine(self.db_str, encoding=’utf-8’, echo=False)dbsession = sessionmaker(bind=self.engine)return dbsessiondatabase =db(db_ip=’127.0.0.1’, db_name=’data_utf’, db_user=’root’, db_pass=’root’, db_charset=’utf8’)class rcvRequest(tornado.web.Request): def initialize(self):self.session = scoped_session(database)() @tornado.gen.coroutine def post(self):response = []for ctt in self.session.query(table).filter(table.ID == id): response.append(ctt)self.write(str(response))def on_finish(self):self.session.close()回答3:
还是建议找个ORM吧。你这样一个链接就请求一次搞不好数据服务就挂掉了。
回答4:请参考https://github.com/PyMySQL/To...
相关文章:
1. 找一个权威、实战的微信扫码授权登录网站的开发教程或者文章2. css3 - border-bottom 的长度可否超过盒子的宽度呢?实现如下图效果。(我的书下面的线)3. javascript - react 中绑定事件和阻止事件冒泡4. javascript - SuperSlide.js火狐不兼容怎么回事呢5. javascript - requestAnimationFrame如何控制帧速?6. css3 - css line-height和font-size高度问题,谁能帮忙解释一下呢7. objective-c - iOS开发支付宝和微信支付完成为什么跳转到了之前开发的一个app?8. angular.js - angurlarJS的安卓的微信端中用加载ngCookies会出错的问题9. javascript - 移动端软键盘弹出顶出布局如何解决10. javascript - 火狐不支持input date怎么处理?

网公网安备