91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pymysql cursor.fetchall()獲取不到數據怎么辦

發布時間:2020-07-27 10:14:07 來源:億速云 閱讀:432 作者:小豬 欄目:開發技術

這篇文章主要講解了pymysql cursor.fetchall()獲取不到數據怎么辦,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

1.之前的寫法(不報錯):

data = cursor.fetchall()
data_name = data[0]['task_type']

2.簡潔的寫法(報錯):

data = cursor.fetchall()[0]['task_type']

用 2 的寫法報錯之后,一度懷疑是數據庫出了問題。不服氣用pycharm 的watch功能進行調試,更是錯上加錯。

pymysql cursor.fetchall()獲取不到數據怎么辦

錯誤原因:

cursor.fetchall() 相當于從數據庫取數據,但是取完就沒有了,再下一行繼續 cursor.fetchall(),取到的就只是空列表。他和變量不一樣,不能重復查詢,推薦第一種寫法,將數據取出來之后,放到一個變量里,再進行處理。

用watch 功能更是添亂。

補充知識:VScode pymysql模塊fetchall方法取不到值bug

這個問題是個很神奇的東西,簡單來說就是用fetchall()取cusor中的_rows的值,明明_rows里面存在值,但依然取出來為空,看了一會pymysql里cursor里的源碼,大概地了解到這個bug的表面原因:

原因:

cursor,在其內部有個rownumber的變量,作用大概就是“游標”的意思吧,如果你是用fetchone()方法,取出來的就是第一個數,然后將游標移到下一位,下次去取就是從游標的位置開始還不是從_rows里的起始位置開始,fetchmany()同理,另外,cursor中還提供了直接移動游標的方法,也就是scroll方法,接下來,我們具體分析下fetchall的代碼:

  def fetchall(self):
  """Fetch all the rows"""
  self._check_executed()
  if self._rows is None:
   return ()
  if self.rownumber:
   result = self._rows[self.rownumber:]
  else:
   result = self._rows
  self.rownumber = len(self._rows)
  return result

代碼簡潔明了,如果_rows里面沒值,確實是在數據庫中沒查到,那就返回空,如果有游標,那從游標位置開始取,否則,直接返回_rows整個結果集,然后將游標移到最后,問題將出在這,我可以確定每次執行完查詢以后,我都關閉了游標,未關閉db連接,并且,不會針對同一次查詢多次fetchall(),但是在執行的時候,有時候即使是第一次fetchall()方法,游標依然在最后,然后我給cursor中所有的rownumber的賦值語句全部加了斷點,這些斷點都沒執行的情況下,rownumber的值依然變了,這足以確定不是pymysql的代碼問題

解決方案:

這就更能確定是vscode的編譯模塊的問題了,新建一個py文件,將原代碼原封不動的復制過去,再執行,竟然將這么好了?!就是這么神奇,什么代碼沒動,換個文件將好了,然后,這個bug是偶發性的,并不是每次fetchall()都會出現這種情況

看完上述內容,是不是對pymysql cursor.fetchall()獲取不到數據怎么辦有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟村| 买车| 博野县| 达拉特旗| 岳西县| 博爱县| 昔阳县| 广灵县| 蕲春县| 沙湾县| 历史| 江永县| 临漳县| 镇沅| 阜新市| 南开区| 兴国县| 邢台县| 宜宾县| 丹棱县| 玉门市| 化德县| 西峡县| 驻马店市| 广水市| 青神县| 阳泉市| 东光县| 巴彦县| 朝阳县| 太和县| 奈曼旗| 泽库县| 天水市| 通河县| 陵川县| 远安县| 门头沟区| 长沙县| 阿勒泰市| 老河口市|