基于python3.x,使用Tornado中的torndb模块操作数据库
来源:互联网 发布:mac.exe foobar 编辑:程序博客网 时间:2024/06/09 23:06
1、开发环境介绍
操作系统:win8(64位),python版本:python3.6(32位),IDE:pycharm
2、安装torndb(这里使用pip进行安装)
pip install torndb
3、源码修改
- 修改MySQLdb,torndb是依赖于MySQLdb实现的对MySQL数据库操作,但是python3中不支持MySQLdb,而是使用pymysql,所以需要将源码中使用MySQLdb的地方修改为pymysql。
1)修改导入模块
import pymysql.connectionsimport pymysql.convertersimport pymysql.cursors# import MySQLdb.constants# import MySQLdb.converters# import MySQLdb.cursors2)修改连接mysql的方式
def reconnect(self): """Closes the existing database connection and re-opens it.""" self.close() self._db = pymysql.connect(**self._db_args)# MySQLdb.connect(**self._db_args) self._db.autocommit(True)
3)修改连接参数,以及遍历字段类型时所使用的列表增加元素(python3使用append进行元素的添加,而不是使用加号)
# if MySQLdb is not None:if pymysql is not None: # Fix the access conversions to properly recognize unicode/binary FIELD_TYPE = pymysql.connections.FIELD_TYPE # MySQLdb.constants.FIELD_TYPE FLAG = pymysql.constants.FLAG# MySQLdb.constants.FLAG CONVERSIONS = copy.copy (pymysql.converters.conversions)# (MySQLdb.converters.conversions) field_types = [FIELD_TYPE.BLOB, FIELD_TYPE.STRING, FIELD_TYPE.VAR_STRING] if 'VARCHAR' in vars(FIELD_TYPE): field_types.append(FIELD_TYPE.VARCHAR) for field_type in field_types: # CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[field_type] CONVERSIONS[field_type] = [(FLAG.BINARY, str)].append(CONVERSIONS[field_type]) # Alias some common MySQL exceptions IntegrityError = pymysql.IntegrityError# MySQLdb.IntegrityError OperationalError = pymysql.OperationalError# MySQLdb.OperationalError
- 修改连接超时时间,在torndb初始化方法中设置,需要传递给pymysql
def __init__(self, host, database, user=None, password=None, max_idle_time=7 * 3600, connect_timeout=10,# 设置连接超时时间,时间是秒 time_zone="+0:00", charset = "utf8", sql_mode="TRADITIONAL"):
- 修改查询方法中的迭代方法(将izip改为zip_longest)
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) column_names = [d[0] for d in cursor.description] return [Row(itertools.zip_longest(column_names, row)) for row in cursor] finally: cursor.close()
4、测试使用
- 数据库
- 源码
class IndexHandler(RequestHandler): def get(self, *args, **kwargs): # get返回的是字典对象 ret = self.application.db.get('select title from houses where id = 2') self.write(ret['title'])if __name__ == '__main__': options.parse_command_line() app = Application([ (r'/', IndexHandler), ], debug=True) # 建立数据库连接 app.db = torndb.Connection( host='127.0.0.1', database='demo', user='you_ruser', password='your_password' ) http_server = httpserver.HTTPServer(app) http_server.listen(options.port) ioloop.IOLoop.current().start()
- 访问
- 经过测试,增删改查等数据库操作能够正常使用,就不一一展示了
阅读全文
1 0
- 基于python3.x,使用Tornado中的torndb模块操作数据库
- tornado 9、torndb模块mysql数据库连接
- python3.x的torndb使用记录(发现网上没有关于torndb的使用说明,可能太简单了吧:-P)
- python3.x中的urllib模块
- python3.x中的urllib模块
- python3.X操作mysql数据库
- python3中的struct模块使用
- python torndb模块
- python torndb模块
- python3中的mysql数据库操作
- python3使用SQLAlchemy操作数据库
- Tornado数据库操作
- torndb 使用简介
- python torndb使用简介
- Python3.x使用PyMysql连接MySQL数据库
- 基于Torndb的简易ORM
- 基于tornado的publish/subscribe模块
- tornado的mysql数据库操作
- Linux gcc命令
- leetcode 104求二叉树的最大深度
- nRF24L01 无线数传模块之间的区别 干货分析
- PHP之static静态变量详解(二)
- 1038. 统计同成绩学生(20)——C语言
- 基于python3.x,使用Tornado中的torndb模块操作数据库
- 大数据实时计算storm零基础小白到高级实战必修之路精品推荐
- python之r.raise_for_status()
- Linux的文件权限与目录配置
- SVN提交文件失败:系统找不到指定路径
- imax6q项目:使用psplash制作开机动画
- 剑指Offer每日一刷 -2017年11月11日
- android实现自定义view
- 反射机制(Reflection)详细解析(1)