首页 > Python > 利用python函数(*)或(**)的参数方式实现表内多字段,多条件查询
201211月6

利用python函数(*)或(**)的参数方式实现表内多字段,多条件查询

起因

       最近在做一个测试数据分析工具,因为涉及到mysql数据库中的数据,所以写了很多使用MySQLdb执行SQL的函数,慢慢就发现有一类很类似的函数:

def get_a_by_c(x):
    return db.excute("SELECT a FROM t WHERE c=%s" % x)
def get_b_by_c(x):
    return db.excute("SELECT b FROM t WHERE c=%s" % x)

它们在某个表内根据不同的条件查询不同的字段,一样的结构却让我们不得不重复的写枯燥的函数。

解决

       下面我们就用python函数(*)或(**)的参数方式来抽象这些查询。因为*可以收集函数的普通参数,**可以收集函数的关键字参数,所以我们可以用如下的函数来达到上面两个函数的目的。

def get(*fields, **conditions):
    sql = "SELECT %s FROM t" % ','.join(fields)
    if conditions:
        sql += " WHERE " + " AND ".join(
            map(lambda x: "%s=%%(%s)s" % (x, x), conditions))
    return db.execute(sql)

# 调用如下
get(a, c=x)
get(b, c=x)
# 或者实现语句SELECT a,b FROM t WHERE c=x AND d=x
get(a, b, c=x, d=x)

       当然甚至可以将表名抽象出来,不过这个就不是这里要说的了,利用python动态语言的特性,可以用简短的程序写出强大的功能。

文章作者: iitshare
本文地址:http://www.iitshare.com/python-args-table-select.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

更多
本文目前尚无任何评论.

发表评论