玩蛇网提供最新Python编程技术信息以及Python资源下载!

用Python方法对Cursor进行扩展

python 培训

Python方法对Cursor进行扩展。为了方便使用,所以我对MySQLdb的Cursor进行了扩展,使其能够支持带?以及:xxx的查询方式。是因为以下原因。

目前的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)

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):

#www.iplaypython.com
#调用的代码如下:
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()

玩蛇网原创,转载请注明文章出处和来源网址:http://www.iplaypython.com/code/other/o2457.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网Python新手QQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
文章发布日期:2016-04-07 15:27 玩蛇网 www.iplaypython.com

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
相关文章推荐
别人正在看
特别推荐
去顶部去底部