使用TorMysql异步访问mysql

使用TorMysql异步访问mysql

下载地址

https://github.com/snower/TorMySQL


代码

import logging
import traceback

import tormysql
from tormysql import DictCursor
from tornado import gen
from tornado.gen import coroutine

from settings import MYSQL_SETTINGS


class AsyncMysqlClient(object):

    def __init__(self):
        super(AsyncMysqlClient, self).__init__()
        self._db_name = MYSQL_SETTINGS['db']
        self._host = MYSQL_SETTINGS['host']
        self._port = MYSQL_SETTINGS['port']
        self._user_name = MYSQL_SETTINGS['user']
        self._password = MYSQL_SETTINGS['passwd']
        self._max_conn = MYSQL_SETTINGS['max_conn']
        self._conn_time_out = MYSQL_SETTINGS['conn_time_out']
        self._db = None
        self._client = None

        self.pool = tormysql.ConnectionPool(
            max_connections=self._max_conn,  # max open connections
            idle_seconds=7200,  # conntion idle timeout time, 0 is not timeout
            wait_connection_timeout=self._conn_time_out,  # wait connection timeout
            host=self._host,
            user=self._user_name,
            passwd=self._password,
            db=self._db_name,
            charset="utf8"
        )

    @coroutine
    def query_one(self, sql, args=None):
        data = None
        with (yield self.pool.Connection()) as conn:
            try:
                with conn.cursor(cursor_cls=DictCursor) as cursor:
                    yield cursor.execute(sql, args)
                    data = cursor.fetchone()
            except Exception, e:
                logging.error(traceback.print_exc())
                logging.error("Query error: %s", e.args)

        raise gen.Return(data)

    @coroutine
    def query_all(self, sql, args=None):
        with (yield self.pool.Connection()) as conn:
            try:
                with conn.cursor(cursor_cls=DictCursor) as cursor:
                    yield cursor.execute(sql, args)
                    datas = cursor.fetchall()
            except Exception, e:
                logging.error(traceback.print_exc())
                logging.error("Query error: %s", e.args)

        raise gen.Return(datas)

    @coroutine
    def execute(self, sql, args=None):
        with (yield self.pool.Connection()) as conn:
            try:
                with conn.cursor(cursor_cls=DictCursor) as cursor:
                    ret = yield cursor.execute(sql, args)
            except Exception, e:
                logging.error(traceback.print_exc())
                logging.error("Query error: %s", e.args)
                yield conn.rollback()
            else:
                yield conn.commit()

        raise gen.Return(ret)

    @coroutine
    def execute_many(self, sql, args=None):
        with (yield self.pool.Connection()) as conn:
            try:
                with conn.cursor(cursor_cls=DictCursor) as cursor:
                    ret = yield cursor.execute(sql, args)
            except Exception, e:
                logging.error(traceback.print_exc())
                logging.error("Query error: %s", e.args)
                yield conn.rollback()
            else:
                yield conn.commit()

        raise gen.Return(ret)


async_mysql_client = AsyncMysqlClient()

猜你喜欢

转载自blog.csdn.net/qq_27623337/article/details/80874975
今日推荐