gpt4 book ai didi

python - 如何为整个 Tornado Web 应用程序建立一个到 SQLite 数据库的连接?

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:00 24 4
gpt4 key购买 nike

现在我每次编辑用户名时都会创建到 SQLite 数据库的新连接。我应该怎么做才能为整个应用程序建立一个连接?

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()

最佳答案

有几个解决方案:

  • 将其包装在一些单例类中(如 Nikos 所述)
  • 将其包装在具有全局 session 和函数 get_session 的单独模块中(实际上与单例类相同,但在模块范围内)
  • 在 RequestHandler 中注入(inject)的 Application 类中处理 db

我会推荐第三个:

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()

关于python - 如何为整个 Tornado Web 应用程序建立一个到 SQLite 数据库的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com