lib/dbi/_dbi.py
来源:互联网 发布:本地端口怎么开启 编辑:程序博客网 时间:2024/05/17 01:57
# encoding: utf-8
from contextlib import closing
DEFAULTBUFFERSIZE = 8192
class _Buffer(object):
''' 提供简化的缓冲批量处理方式 '''
def __init__(self, sql, size=DEFAULTBUFFERSIZE):
''' 初始化时指定缓冲操作SQL '''
self.sql = sql
self.size = size
self.data = []
def connect(self, conn):
''' 绑定数据库连接 '''
self.conn = conn
def flush(self):
''' flush self's buffer '''
buffer, self.data = self.data[:], []
with closing(self.conn.cursor()) as curr:
curr.executemany(self.sql, buffer)
self.conn.commit()
def append(self, o):
''' 向缓冲中添加数据 '''
self.data.append(o)
if len(self.data) >= self.size:
self.flush()
def __lshift__(self, o):
''' 重载 << 操作符于append方法 '''
self.append(o)
def close(self):
''' 完成关闭 '''
self.flush()
class _DBI(object):
def __init__(self, **kwg):
''' 初始化时指定参数 '''
self.setting = dict(kwg)
self.conn = None
def open(self):
''' 用专有的驱动程序依据初始化参数创建数据库连接 '''
if not self.conn:
#~ self.conn = ..(**self.setting)
pass
return
def close(self):
''' 关闭连接 '''
self.conn.close()
self.conn = None
def __enter__(self):
''' 正文模式的进入处理 '''
self.open()
return self
def __exit__(self, *args):
''' 正文模式的退出处理 '''
self.close()
return
def execute(self, sql, *args):
''' 执行给定的SQL, 并传入给定的参数 '''
with closing(self.conn.cursor()) as curr:
curr.execute(sql, args)
self.conn.commit()
def query(self, sql, *args, **kwg):
''' 按指定的SQL及参数查询,
命名参数中可以指定rowfactory='dict'要求以字典形式返回查询结果,
或以其提供的方法代入查询结果的列名-值, 生产指定的对象实例,
显示指定rowfactory或以默认的形式, 将直接返回查询结果集中的元组'''
setting = dict(kwg)
rowfactory = setting.get('rowfactory','row')
with closing(self.conn.cursor()) as curr:
curr.execute(sql, args)
fields = [f[0] for f in curr.description]
for r in curr:
if rowfactory == 'row':
yield r
elif rowfactory == 'dict':
yield dict(map(None, fields, r))
else:
yield rowfactory(**dict(map(None, fields, r)))
def bindBuffer(self, buffer):
''' 绑定一个已经定义了的_Buffer实例 '''
self.buffer = buffer
buffer.connect(self.conn)
def initBuffer(self, sql, size=DEFAULTBUFFERSIZE):
''' 指定SQL, 初始化一个被绑定的_Buffer '''
self.bindBuffer(_Buffer(sql, size))
- lib/dbi/_dbi.py
- lib/dbi/litedbi.py
- lib/dbi/msdbi.py
- Python Lib Queue.py
- py-faster-rcnn/lib/datasets/imdb.py
- 免拷贝java lib或依赖项目的create_project.py
- 关于POX中的lib.revent.py阅读分析
- File "E:\python27\lib\site-packages\pytesser\pytesser.py",出错
- Faster R-CNN训练问题解决:py-faster-rcnn/lib/datasets/imdb.py问题
- windows 下 编译py-faster-rcnn,py-rfcn, py-pva-frcn 下的lib。编译Cython模块
- DBI 测试
- Perl DBI
- perl DBI
- dbi dbd
- dbi 句柄
- py
- py
- py
- VC6.0 debug和release的区别及如何设置
- php里去除html标记的函数 【转】
- Joomla! vm商品运费模块配置
- synonym的限制
- Java操作Word文档封装类
- lib/dbi/_dbi.py
- synonym自动生成
- 如何让浮动层加margin后不换行-Div+CSS教程
- 人脉存折 五个朋友决定你的富贵
- 悲剧的TC,悲剧的1000__第一次TC小结
- Cookie & Session
- html标签及属性大全
- WTL 8.0的几个漏洞
- 如何将网页文件导出到word中