[英]How to make one connection to SQLite db for whole tornado web application?
Now I am creating new connection to SQLite db each time I edit username. 现在,每次编辑用户名时,我都在创建与SQLite db的新连接。 What should I do to make a single connection for a whole application?
如何为整个应用程序建立单个连接?
class UserEditHandler(tornado.web.RequestHandler):
def get(self, user_id):
self.render('user_edit.html')
def post(self, user_id):
edited_name = str(self.get_arguments('name')[0])
session = create_session()
user_object = session.query(User).filter_by(id=user_id).first()
user_object.name = edited_name
session.commit()
There are couple solutions: 有几种解决方案:
I would recommend third one: 我会推荐第三个:
import tornado
class MyApp(tornado.web.Application):
def __init__(self, *args, **kwargs):
super(MyApp, self).__init__(*args, **kwargs)
# or even initilaize connection
self._db = None
@property
def db(self):
if self._db is None:
self._db = create_session()
# additionally you can check here if session is time-outed or something
return self._db
class UserEditHandler(tornado.web.RequestHandler):
def get(self, user_id):
self.render('user_edit.html')
def post(self, user_id):
edited_name = str(self.get_arguments('name')[0])
user_object = self.application.db.query(User).filter_by(
id=user_id
).first()
user_object.name = edited_name
self.application.db.commit()
One another option is to add a connection to your app settings, it will be accessible in all classes inherited form RequestHandler or WebSocketHandler. 另一种选择是将连接添加到您的应用设置,它将在继承自RequestHandler或WebSocketHandler的所有类中进行访问。
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", UserEditHandler)
],
settings = dict(
db_session = create_session()
)
class UserEditHandler(tornado.web.RequestHandler):
def get(self, user_id):
self.render('user_edit.html')
def post(self, user_id):
edited_name = str(self.get_arguments('name')[0])
session = self.settings['db_session']
user_object = session.query(User).filter_by(id=user_id).first()
user_object.name = edited_name
session.commit()
if __name__ == "__main__":
app = Application()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
Also make sure to check out tornado demos for more insights https://github.com/tornadoweb/tornado/tree/master/demos 还要确保查看龙卷风演示以获得更多见解https://github.com/tornadoweb/tornado/tree/master/demos
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.