程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> 利用python函數(*)或(**)的參數方式實現表內多字段,多條件查詢

利用python函數(*)或(**)的參數方式實現表內多字段,多條件查詢

編輯: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動態語言的特性,可以用簡短的程序寫出強大的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved