zoukankan      html  css  js  c++  java
  • python tornado 增加数据库连接池

    #!/usr/bin/env python
    #_*_ coding:utf-8_*_
     
    import tornado.ioloop
    import tornado.web
    import tornado.escape
    import pymssql,pymysql
    from DBUtils.PooledDB import PooledDB
     
     
    class Database:
        def __init__(self,*db):
            if len(db) == 5:
                #mysql
                self.host = db[0]
                self.port = db[1]
                self.user = db[2]
                self.pwd = db[3]
                self.db = db[4]
            else:
                #mssql
                self.host = db[0]
                self.port = None
                self.user = db[1]
                self.pwd = db[2]
                self.db = db[3]
            self._CreatePool()
     
        def _CreatePool(self):
            if not self.db:
                raise NameError + '没有设置数据库信息'
            if (self.port == None):
                self.Pool = PooledDB(creator=pymssql, mincached=2, maxcached=5, maxshared=3, maxconnections=6,
                                     blocking=True, host=self.host, user=self.user, 
                                     password=self.pwd, database=self.db, charset="utf8")
            else:
                self.Pool = PooledDB(creator=pymysql, mincached=2, maxcached=5, maxshared=3, maxconnections=6,
                                     blocking=True, host=self.host, port=self.port, 
                                     user=self.user, password=self.pwd, database=self.db, charset="utf8")
     
        def _Getconnect(self):
            self.conn = self.Pool.connection()
            cur = self.conn.cursor()
            if not cur:
                raise "数据库连接不上"
            else:
                return cur
            # 查询sql
     
        def ExecQuery(self, sql):
            cur = self._Getconnect()
            cur.execute(sql)
            relist = cur.fetchall()
            cur.close()
            self.conn.close()
            return relist
            # 非查询的sql
     
        def ExecNoQuery(self, sql):
            cur = self._Getconnect()
            cur.execute(sql)
            self.conn.commit()
            cur.close()
            self.conn.close()
     
    gdbp = Database
    class MainHadle(tornado.web.RequestHandler):
        def get(self,*args):
            filename = self.get_argument('filename')
            print(filename)
            self.set_header('Content-Type', 'application/octet-stream')
            self.set_header('Content-Disposition', 'attachment; filename=%s'%filename.encode('utf-8'))
            with open(filename,'rb') as f:
                while True:
                    data = f.read(1024)
                    if not data:
                        break
                    self.write(data)
     
    class MainIndex(tornado.web.RequestHandler):
        def get(self):
            self.write('Hello')
     
    class CheckUser(tornado.web.RequestHandler):
        def get(self):
            user = self.get_argument('user')
            pwd = self.get_argument('passwd')
            #print(user)
     
            if user != '' and pwd != '':
                lssql =  "select usr_code,password from sb_user where usr_code= '%s' " % user
                #print(lssql)
                rds =  gdbp.ExecQuery(lssql)
                if rds[0][1] == pwd :
                    js_str = tornado.escape.json_encode('{"result":"true","msg":""}')
                    self.write(js_str)
                else:
                    js_str = tornado.escape.json_encode('{"result":"false","msg":"用户或密码错误"}')
                    self.write(js_str)
                #print(rds[0][0])
            else:
                js_str = tornado.escape.json_encode('{"result":"false","msg":"参数错误"}')
                self.write(js_str)
     
     
     
     
    def make_app():
        return tornado.web.Application([(r"/download",MainHadle),(r"/",MainIndex),(r"/checkuser",CheckUser)])
     
    def make_dbpool():
        global gdbp
        gdbp = Database('172.20.1.2','sa','xxx','MPL')
     
     
    if __name__ == '__main__':
        app = make_app()
        app.listen(8888)
        make_dbpool()
        tornado.ioloop.IOLoop.current().start()
     
     
     
     
  • 相关阅读:
    还做开发!重新学习纪念一下先
    NOD32中小企业服务器版部署方法
    我买车了,写个总结
    Windows Server 2008 各个版本微软官方下载
    SQLServer2008过程中因性能计数器不一致导致无法安装的解决方法
    自建邮件服务器的注意事项
    01.Linux下C语言编程环境检查
    wcf部署到IIS宿主上报错
    Win7 开发WCF时 提示 进程不具有此命名空间的访问权限
    SQLServer2008设置 开启远程连接 (转)
  • 原文地址:https://www.cnblogs.com/iwana/p/12882309.html
Copyright © 2011-2022 走看看