python开发web service 中数据库链接和释放应该怎么处理?

发布于 2022-09-04 12:53:22 字数 1043 浏览 14 评论 0

用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_charset
        self.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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

葬シ愛 2022-09-11 12:53:22

不合理,每来一次请求就建立一次连接不是很浪费吗?
sqlalchemy可以很好的帮你管理连接池,找找资料,用连接池吧.

葬心 2022-09-11 12:53:22

代码调整为以下这种方式是否合理?

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_charset
        engine = create_engine(self.db_str, encoding='utf-8', echo=False)
        dbsession = sessionmaker(bind=self.engine)
        return dbsession

database =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()
弥枳 2022-09-11 12:53:22

还是建议找个ORM吧。你这样一个链接就请求一次搞不好数据服务就挂掉了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文