亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實(shí)現(xiàn)將元組中的元素作為參數(shù)傳入函數(shù)的操作

 更新時(shí)間:2020年06月05日 11:20:42   作者:inter_peng  
這篇文章主要介紹了Python實(shí)現(xiàn)將元組中的元素作為參數(shù)傳入函數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

本文由Markdown語(yǔ)法編輯器編輯完成。

1. 需求:

現(xiàn)在有一個(gè)Python的需求需要實(shí)現(xiàn):

就是實(shí)現(xiàn)連接一次數(shù)據(jù)庫(kù),就能夠執(zhí)行多條SQL語(yǔ)句,而且這個(gè)SQL語(yǔ)句是需要通過(guò)調(diào)用者將每一次執(zhí)行的參數(shù)傳入進(jìn)來(lái),組合成一條完整的SQL語(yǔ)句再去執(zhí)行。

經(jīng)過(guò)初步研究,傳入?yún)?shù)時(shí),通過(guò)數(shù)組的形式,數(shù)組中的每一個(gè)元素則是一個(gè)元組tuple(因?yàn)镾QL中需要填入的參數(shù)可能是多個(gè),所以需要通過(guò)元組的形式傳入)。

比如SQL語(yǔ)句的形式為:

basic_sql = ‘SELECT * FROM series se where se.body_part like “%{}%” and se.modality = “{}”'

在這條SQL中,有兩個(gè)變量需要傳入,分別用{}表示,一個(gè)是序列的body_part, 一個(gè)是序列的modality。準(zhǔn)備傳入的參數(shù)為:

[(‘Chest', ‘CT'), (‘Lung', ‘MRI'), (‘Leg', ‘DR')]等。

希望通過(guò)以下的格式化函數(shù),將參數(shù)傳入:

SELECT * FROM series se where se.body_part like “%{}%” and se.modality = “{}”.format(param1, param2) 這樣。

2. 函數(shù)實(shí)現(xiàn):

雖然看起來(lái)這個(gè)需求非常明確,也比較簡(jiǎn)單。但是實(shí)現(xiàn)起來(lái),還是花費(fèi)了我好長(zhǎng)的時(shí)間。究其原因,主要的困惑就是如何能夠?qū)⑦@個(gè)參數(shù)傳入到SQL中,并且去執(zhí)行SQL。

2.1 思路一:

在基于需求中提到的那個(gè)解決思路,我希望是拼接字符串,將拼接后的整個(gè)字符串作為完整的SQL語(yǔ)句,然后執(zhí)行生成結(jié)果。

def execute_multi_sql(self, sql, params_list):
 result_list = []
  try:
   self._db_connection = self._db_connection_pool.connection()
   self._db_cursor = self._db_connection.cursor()
 for params in params_list:
  combined_sql = []
  combined_sql.append(sql)
  combined_sql.append('.format(')
  combined_sql.append(','.join(map(str, params)))
  combined_sql.append(')')
  combined_sql = ''.join(combined_sql)
  logger.debug("executing sql: %s" % combined_sql)
  self._db_cursor.execute(combined_sql)
  result = self._db_cursor.fetchall()
  logger.debug(u"SQL語(yǔ)句已經(jīng)被執(zhí)行, 結(jié)果是:\n %s" % str(result))
  result_list.append(result)
 except Exception as e:
   logger.exception(u"執(zhí)行sql語(yǔ)句時(shí),發(fā)生了錯(cuò)誤: %s", e.message)
   raise
  finally:
   self._db_connection.close()
   return result_list

但是在執(zhí)行這個(gè)函數(shù)的時(shí)候,會(huì)報(bào)異常,異常說(shuō)明是:tuple out of bounds.

以下是問(wèn)題產(chǎn)生的原因:

2.2 思路二:

通過(guò)google搜索,最終找到的解決方案是如下鏈接所示:

expanding tuples into arguments.

https://stackoverflow.com/questions/1993727/expanding-tuples-into-arguments

from DBUtils.PooledDB import PooledDB
import logging
......

 def execute_multi(self, sql, params_list):
  if not isinstance(params_list, list):
   raise Exception(u'傳入?yún)?shù)要求是列表類型,請(qǐng)檢查傳入?yún)?shù)類型!')
  result_list = []
  try:
   self._db_connection = self._db_connection_pool.connection()
   self._db_cursor = self._db_connection.cursor()

   for params in params_list:
    # 將每一個(gè)元組中存的參數(shù)傳入format中,替換sql中的變量值.
    # 如果數(shù)組中的元素不是元組,則sql中只有一個(gè)變量需要替換,將參數(shù)直接替換.
    if isinstance(params, tuple):
     combined_sql = sql.format(*params)
    else:
     combined_sql = sql.format(params)

    logger.debug("executing sql: %s" % combined_sql)
    self._db_cursor.execute(combined_sql)
    result = self._db_cursor.fetchall()
    logger.debug(u"SQL語(yǔ)句已經(jīng)被執(zhí)行, 結(jié)果是:\n %s" % str(result))
    if len(result) > 0:
     result_list.append(result)
  except Exception as e:
   logger.exception(u"執(zhí)行sql語(yǔ)句時(shí),發(fā)生了錯(cuò)誤: %s", e.message)
   raise
  finally:
   self._db_connection.close()
   return result_list

這段代碼中,最主要的修改就是關(guān)于處理參數(shù)的部分. 由于傳入的參數(shù)是一個(gè)數(shù)組,數(shù)組中的每一個(gè)元素是一個(gè)tuple, tuple內(nèi)的元素個(gè)數(shù)是由第2個(gè)參數(shù)sql中需要傳入的參數(shù)個(gè)數(shù)對(duì)應(yīng)的。

如上述需求中提到的,傳入的sql中需要補(bǔ)充兩個(gè)參數(shù)值,分別是body_part和modality, 因此數(shù)組中每一個(gè)tuple的長(zhǎng)度也是2.

這樣通過(guò)*tuple的方式,可以依次取出tuple中的每一個(gè)元素作為變量,傳入前面的sql語(yǔ)句中,組成一個(gè)完整的sql語(yǔ)句。

然后再調(diào)用db.execute, 便可以獲取到查詢結(jié)果.

補(bǔ)充知識(shí):Python——利用元組作為函數(shù)返回值:輸出最值和個(gè)數(shù)

廢話不多說(shuō),看代碼!

# 利用元組作為函數(shù)返回值:輸出最值和個(gè)數(shù)
def yuanzu(*xxx):
  i = max(xxx)
  j = min(xxx)
  print("最大值是%s" % i)
  print("最小值是%s" % j)
  l = len(xxx)
  print("長(zhǎng)度是{0}".format(l))

yuanzu(1,2,5,6,5)

以上這篇Python實(shí)現(xiàn)將元組中的元素作為參數(shù)傳入函數(shù)的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python餐飲AI機(jī)器人學(xué)習(xí)數(shù)據(jù)網(wǎng)絡(luò)抓取

    Python餐飲AI機(jī)器人學(xué)習(xí)數(shù)據(jù)網(wǎng)絡(luò)抓取

    在餐飲行業(yè),AI機(jī)器人可以通過(guò)學(xué)習(xí)大量的相關(guān)數(shù)據(jù)來(lái)提供更好的服務(wù)和體驗(yàn),在文本中,我們將介紹如何使用python進(jìn)行餐飲A?I機(jī)器人學(xué)習(xí)數(shù)據(jù)的網(wǎng)絡(luò)抓取,并提供代碼的示例和最佳實(shí)踐
    2023-12-12
  • python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法

    python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python中ValueError報(bào)錯(cuò)的原因和解決辦法

    Python中ValueError報(bào)錯(cuò)的原因和解決辦法

    在Python編程中,ValueError是一種非常常見(jiàn)的異常類型,它通常發(fā)生在函數(shù)接收到一個(gè)有效類型但不適合該函數(shù)操作的值時(shí),本文將深入探討ValueError的報(bào)錯(cuò)原因、提供詳細(xì)的解決辦法,并通過(guò)豐富的代碼示例來(lái)加深理解,需要的朋友可以參考下
    2024-07-07
  • Python中協(xié)程coroutine適用場(chǎng)景分析

    Python中協(xié)程coroutine適用場(chǎng)景分析

    多線程中可能出現(xiàn)多個(gè)線程爭(zhēng)搶變量,所以變量需要加鎖;協(xié)程中任一時(shí)刻都只有一個(gè)線程,所以變量不需要加鎖,這篇文章主要介紹了Python中協(xié)程(coroutine)詳解,需要的朋友可以參考下
    2024-04-04
  • Python循環(huán)語(yǔ)句For?Range用法示例詳解

    Python循環(huán)語(yǔ)句For?Range用法示例詳解

    這篇文章主要為大家介紹了Python循環(huán)語(yǔ)句For?Range用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Python項(xiàng)目管理工具Poetry使用示例詳解

    Python項(xiàng)目管理工具Poetry使用示例詳解

    這篇文章主要為大家介紹了Python項(xiàng)目管理工具Poetry使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 10張動(dòng)圖學(xué)會(huì)python循環(huán)與遞歸問(wèn)題

    10張動(dòng)圖學(xué)會(huì)python循環(huán)與遞歸問(wèn)題

    今天為大家整理了十張動(dòng)圖GIFS,有助于認(rèn)識(shí)循環(huán)、遞歸、二分檢索等概念的具體運(yùn)行情況。代碼實(shí)例以Python語(yǔ)言編寫(xiě),非常不錯(cuò),感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2021-02-02
  • Python 如何獲取目錄下的文件列表,并自然排序

    Python 如何獲取目錄下的文件列表,并自然排序

    這篇文章主要介紹了Python 如何獲取目錄下的文件列表,并自然排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Pytorch如何切換 cpu和gpu的使用詳解

    Pytorch如何切換 cpu和gpu的使用詳解

    這篇文章主要介紹了Pytorch如何切換 cpu和gpu的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python模擬預(yù)測(cè)一下新型冠狀病毒肺炎的數(shù)據(jù)

    python模擬預(yù)測(cè)一下新型冠狀病毒肺炎的數(shù)據(jù)

    這篇文章主要介紹了python模擬預(yù)測(cè)一下新型冠狀病毒肺炎的數(shù)據(jù) ,需要的朋友可以參考下
    2020-02-02

最新評(píng)論