用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.iplaypy.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()
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/other/o2457.html
相关文章 Recommend