torndb

torndb是tornado框架封装使用MySQLdb,十分方便。



class Connection(object):
    def __init__(self, host, database, user=None, password=None,
                 max_idle_time=7 * 3600, connect_timeout=0,
                 time_zone="+0:00", charset = "utf8", sql_mode="TRADITIONAL"):
        self.host = host
        self.database = database
        self.max_idle_time = float(max_idle_time)

参数

在这里,可以学到几种参数的传输

*;一个星号代表的是tuple,元组

**;双星号代表的是字典

还有一种user=None,是为了防止没有这个参数

初始化

host:主机号database:数据库名user=Nonepassword=Nonecharset:utf-8 编码time_zone:时区max_idle_time:待了解connect_timeoutsql_mode:
        self.host = host
        self.database = database
        self.max_idle_time = float(max_idle_time)

max_idle_time:不知道他的作用

        args = dict(conv=CONVERSIONS, use_unicode=True, charset=charset,
                    db=database, init_command=(‘SET time_zone = "%s"‘ % time_zone),
                    connect_timeout=connect_timeout, sql_mode=sql_mode)

使用dict()生成一个字典:他的作用现在也不知道

        if user is not None:
            args["user"] = user
        if password is not None:
            args["passwd"] = password

如果用户,密码存在,就加到args字典中去

        # We accept a path to a MySQL socket file or a host(:port) string
        if "/" in host:
            args["unix_socket"] = host
        else:
            self.socket = None
            pair = host.split(":")
            if len(pair) == 2:
                args["host"] = pair[0]
                args["port"] = int(pair[1])
            else:
                args["host"] = host
                args["port"] = 3306

“/”和“\”

windows下是\,linux和unix下是/

        self._db = None
        self._db_args = args
        self._last_use_time = time.time()

self._last_use_time = time.time()

算的是1970年1月1日至今的时间秒数

self._db = None:置为空,这个是MySQLdb连接的db

        try:
            self.reconnect()
        except Exception:
            logging.error("Cannot connect to MySQL on %s", self.host,
                          exc_info=True)

reconnect

这里调用self.reconnect()方法,那就看看他是干嘛的

    def reconnect(self):
        """Closes the existing database connection and re-opens it."""
        self.close()
        self._db = MySQLdb.connect(**self._db_args)
        self._db.autocommit(True)

关闭存在的数据库连接,然后重新连接他

 self._db = MySQLdb.connect(**self._db_args)  MySQLdb的连接
 self._db.autocommit(True)
autocommit属性设置为True:这样设置的作用是自动提交
close 关闭数据库的连接
    def close(self):
        """Closes this database connection."""
        if getattr(self, "_db", None) is not None:
            self._db.close()
            self._db = None

获取对象(自己本身)的“_db”属性是不是None,不是的话,就关闭,并且置为None

    def __del__(self):
        self.close()

python 类的__del__方法

__del__方法

当一个类实例删除时被调用

    def query(self, query, *parameters, **kwparameters):
        """Returns a row list for the given query and parameters."""
        cursor = self._cursor()
        try:
            self._execute(cursor, query, parameters, kwparameters)
            if cursor.description:
                column_names = [d[0] for d in cursor.description]
                return [Row(itertools.izip(column_names, row)) for row in cursor]
            return None
        finally:
            cursor.close()

_cursor方法:cursor的意思是数据库中的游标,一种查询方法

    def _cursor(self):
        self._ensure_connected()
        return self._db.cursor()
时间: 2024-10-23 20:19:41

torndb的相关文章

基于Torndb的简易ORM

最近在用tornado写一个基于Rest的WebService服务端,只提供后端服务,其他webserver应用通过URL,Rest的方式来访问. 我们在开发web应用的时候,难免会想到ORM的一些框架,比如java ee中常用的hibernate, ibatis以及python中的SQLAlchemy之类.使用ORM会在一定程度上加快我们的开发效率. 一个简易ORM框架主要实现如下几个功能就足够了: 1.插入: 类对象映射为数据库记录 2.查询:数据库记录映射为类对象 3.修改.删除:可以通过

ubuntu下如何安装MySQLdb?以及torndb?

sudo apt-get install libmysqlclient-dev python-devpip install MySQL-pythonpip install torndb

Python开发【模块】:torndb

Torndb模块 概要:torndb是一个轻量级的基于MySQLdb封装的一个模块,其是tornado框架的一部分.其项目主页为:https://github.com/bdarnell/torndb .从tornado3.0版本以后,其已经作为一个独立模块发行了.可以通过easy_install 或pip的方式直接安装. 1.连接数据库 # 创建连接 import torndb # 数据库.账号.密码.时区 db = torndb.Connection("192.168.1.134:3306&q

tornado中使用torndb,连接数过高的问题

问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show processlist,发现连接数很高,我就将目标锁定在程序代码和torndb上了. 探索原因 当我kill掉tornado的进程时候,连接数就会被关闭,所以果断判断会不会是torndb的原因,导致我连接没有断开.于是我猜想会不会是在tornado服务挂掉的时候,mysql的连接没关.而且我想到我

Python入门学习教程:数据库操作,连接MySql数据库

各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和python基础知识之上进行的.如想学习python基础请移步:Python开发实战系列教程-链接汇总,持续更新. 数据库增删改查操作. 我们打开Navicat 创建一个数据库Manager,并且创建一个数据表:Student 并添加初始化数据: 传统方式进行增删改查: 传统方式进行数据库的连接,可以使

Tornado异步任务的实现之一

前言 刚开始使用用tornado时都很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛? 但为什么我在handler中有一个步骤是耗时时,整体的响应就慢下了呢? 是不是torando根本就不好用. 其实是你用错了,因为你没有将你的耗时任务使用tornado的异步功能实现. 下面就各种torndo响应请求,进行耗时任务处理时的各种异步场景一一总结 一.异步HTTP请求的实现 tornado是一个异步web framework,说是异步,是因为tornado server与client的网络

tornado 学习之GET POST方法 -- ()转

1 import torndb 2 import tornado.web 3 import tornado.ioloop 4 from tornado.options import define,options,parse_command_line 5 6 define('port',default=8888,help='run on the port',type=int) 7 database=torndb.Connection('localhost','talk',user='root',p

mysql延迟判断模板

使用自定义模板 #!/usr/bin/env python #coding:utf-8 import MySQLdb import torndb sql_s = "show slave status" sql_m = "show master status" # 使用MySQLdb的连接 def db_conM(args): #     args = {'host':[mhost,shost],'user':user,'passwd':passwd,'db':db,

python读取文本数据写入到数据库及查询优化

文本数据格式 ip2int函数用于IP地址转化为整数 int2ip函数用于整数转化为IP地址 insert_row函数用于插入数据库记录 from __future__ import print_function import torndb def get_mysql_conn():     return torndb.Connection(         host=mysql["host"] + ":" + mysql["port"],