python Torndb 学习小结

对于mysql数据库的操作平时还是用torndb比较多,他对MySQLdb简单做了下封装,把commit、cursor、链接管理这些讨厌的操作给隐藏了,而且查询返回的结果直接处理成字典,用起来很方便。平时使用一般select操作使用get/query;insert/update/delete操作如果对返回值没有要求,都统一使用execute,如果需要返回值可以看下提供的其他函数。

下面是对数据库执行select/insert/update/delete的操作例子,可以看到代码量要比直接用MySQLdb少很多,而且也很简单:

In [3]: import torndb

In [4]: db = torndb.Connection('localhost','test','root','budong')

#查询,单条记录
In [5]: db.get("select * from author where id=%s",10)
Out[5]: {'id': 10L, 'name': u'lee9'}

#查询,多条记录
In [6]: db.query("select * from author")
Out[6]:
[{'id': 2L, 'name': u'lee1'},
{'id': 3L, 'name': u'lee2'},
{'id': 4L, 'name': u'lee3'},
{'id': 5L, 'name': u'lee4'},
{'id': 6L, 'name': u'lee5'},
{'id': 7L, 'name': u'lee6'},
{'id': 8L, 'name': u'lee7'},
{'id': 9L, 'name': u'lee8'},
{'id': 10L, 'name': u'lee9'},
{'id': 11L, 'name': u'lee0'}]

#删除
In [7]: db.execute("delete from author where id=%s",10)
Out[7]: 0L

#更新
In [8]: db.execute("update author set name='test' where id=%s",8)
Out[8]: 0L

#插入
In [9]: db.execute("insert into author(name) values(%s)","test")
Out[9]: 13L

In [10]:

小结:

1.torndb只是对MySQLdb简单做了一个封装,不算是ORM,源码也很少不到300行,涉及到的具体函数,看下代码也就理解了

2.torndb管理对mysql的链接是通过_ensure_connected这个函数实现的,每次获取cursor的时候检查一下链接是否存在或链接的idle_time是否超过了max_idle_time,超过了就关闭当前链接,重新建立一个新的链接,如下:

def _ensure_connected(self):
       # Mysql by default closes client connections that are idle for
       # 8 hours, but the client library does not report this fact until
       # you try to perform a query and it fails.  Protect against this
       # case by preemptively closing and reopening the connection
       # if it has been idle for too long (7 hours by default).
       if (self._db is None or
           (time.time() - self._last_use_time > self.max_idle_time)):
           self.reconnect()
       self._last_use_time = time.time()

参考资料:

torndb:https://github.com/bdarnell/torndb

Torndb Documentation:https://torndb.readthedocs.io/en/latest/