国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > 使MySQLdb的SQL查询中支持?及:xxx的查询方式

使MySQLdb的SQL查询中支持?及:xxx的查询方式

来源:程序员人生   发布时间:2014-02-05 16:47:36 阅读次数:3854次

MySQLdb中的sql的语法目前支持如下语法:
insert into users(id, name, domain, created_at)values(%s, %s, %s, %s)
但很多的一些通用的sql的语法却是下面这样
insert into users(id, name, domain, created_at)values(?, ?, ?, ?)
insert into users(id, name, domain, created_at)values(:id, :name, :domain, :created_at)
所以我对MySQLdb的Cursor进行了扩展,使其能够支持带?以及:xxx的查询方式

Python代码:

class BaseCursor(MySQLdb.cursors.BaseCursor):
def _get_query_parameters(self, query, params):
if isinstance(params, dict) and params:
p = re.compile(':w+')
return (p.sub('%s', query),
[params[param_token[1:]] for param_token in p.findall(query)])
else:
return (query.replace('?', '%s'), params)

def execute(self, query, args=None):
(query, params) = self._get_query_parameters(query, args)
return MySQLdb.cursors.BaseCursor.execute(self, query, params)

class Cursor(CursorStoreResultMixIn, CursorTupleRowsMixIn,
BaseCursor):

#调用的代码如下:
cursor=Cursor(self._dbconn)
try:
cursor.execute('insert into users(name, domain)values(:name, :domain)', dict(name='xxx', domain='hahaha'))
return cursor.lastrowid
finally:
cursor.close()
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
为码而活
积分:4237
15粉丝
7关注
栏目热点
关闭
程序员人生