好程式設計師Python培訓分享簡述fetchone()函式
fetchone() 函式報 'NoneType' object is not subscriptable 的錯誤今天有人向我 請教一道 python 操作 mysql 的題,我也是差一點掉坑裡去了。題是這樣的: python 運算元據庫,實現使用者的註冊登陸功能。其中最主要的是資料庫的存入和讀取。
其中一段程式碼如下:
# 查詢與使用者名稱對應的密碼
sql = "select hash_password from user where username ='{}'".format(self.username)
self.cursor.execute(sql)
# 輸出查詢結果
print(self.cursor.fetchone()[0])
print(self.passwd)
# 對比,查詢結果與加密後的密碼
if self.cursor.fetchone()[0] == self.passwd:
print(' 登入成功 ')
else:
print(' 請輸入正確的密碼 ')
乍一看沒什麼錯,但是執行報錯了,
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
rl.login()
File "xxxxxx", line 314,in login
if self.cursor.fetchone()[0] == self.passwd:
TypeError: 'NoneType' object is not subscriptable
怎麼回事呢?明明輸出的兩個密碼是一樣的,怎麼對比出錯呢,而且報錯也很奇怪,NoneType 說明對比的兩個值中有一個是 None , self.passwd 排除,那隻能說 self.cursor.fetchone()[0] 是 None ,我將 if 註釋了,再次 print() 輸出一下 self.cursor.fetchone()[0] ,果然又報錯了
print(self.cursor.fetchone()[0])
TypeError: 'NoneType' object is not subscriptable
這下捉急了,百度唄,查了半天也沒查到什麼。過了一會才想起如果mysql 執行語句結果的查詢集只有一行資料,是不能呼叫兩次 self.cursor.fetchone() 的,也就是說,第二次呼叫根本不可能有結果。那我把程式碼改一下好了。
sql = "select hash_password from user where username ='{}'".format(self.username)
self.cursor.execute(sql)
sql_password = self.cursor.fetchone()[0]
print(sql_password)
print(self.passwd)
if sql_password == self.passwd:
print(' 登入成功 ')
else:
print(' 請輸入正確的密碼 ')
OK ,成功了,沒報錯了,可真不容易。
用法如下所示:
fetchone() 用法:
cur.execute("select host,user,password from user where user='%s'" %acc)
jilu = cur.fetchone() ## 此時 透過 jilu[0],jilu[1],jilu[2] 可以依次訪問 host,user,password
fetchall() 用法:
cur.execute("select * from user")
如果select 本身取的時候有多條資料時:
cursor.fetchone() :將只取最上面的第一條結果,返回單個元組如 ('id','title') ,然後多次使用 cursor.fetchone() ,依次取得下一條結果,直到為空。
cursor.fetchall() : 將返回所有結果,返回二維元組,如 (('id','title'),('id','title')),
如果select 本身取的時候只有一條資料時:
cursor.fetchone() :將只返回一條結果,返回單個元組如 ('id','title') 。
cursor.fetchall() : 也將返回所有結果,返回二維元組,如 (('id','title'),),
備註:其中的id 和 title 為具體的內容
python 在 mysql 在使用 fetchall 或者是 fetchone 時,綜合起來講, fetchall 返回二維元組(元組中含有元組), fetchone 只返回一維元組。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2731258/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享numpy簡介程式設計師Python
- 好程式設計師Python培訓分享函數語言程式設計之匿名函式程式設計師Python函數函式
- 好程式設計師Python培訓分享Python的遞迴函式與匿名函式呼叫程式設計師Python遞迴函式
- 好程式設計師Python培訓分享函式的定義與使用示例程式設計師Python函式
- 好程式設計師Java培訓分享Java函式式編碼結構程式設計師Java函式
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 好程式設計師Java培訓簡述Java新手如何學程式碼程式設計師Java
- 好程式設計師Python培訓分享四款Python程式庫程式設計師Python
- 好程式設計師web前端培訓分享HTML DOM簡介程式設計師Web前端HTML
- 好程式設計師Python培訓分享函式返回值的示例程式碼詳解程式設計師Python函式
- 好程式設計師Python培訓分享機器學習面試題一程式設計師Python機器學習面試題
- 好程式設計師大資料培訓分享之hive常用內部函式程式設計師大資料Hive函式
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Python培訓分享Python異常處理程式設計師Python
- 好程式設計師web前端培訓分享FormData 簡單介紹程式設計師Web前端ORM
- 好程式設計師web培訓簡述web前端開發工具有哪些程式設計師Web前端
- 好程式設計師web前端培訓分享JavaScript學習筆記函式進階程式設計師Web前端JavaScript筆記函式
- 好程式設計師web前端培訓分享關於parseInt函式的一切程式設計師Web前端函式
- 好程式設計師大資料培訓分享之hive常見自定義函式程式設計師大資料Hive函式
- 好程式設計師Python培訓分享開發工具推薦程式設計師Python
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Python培訓分享For迴圈用法詳解程式設計師Python
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Python培訓分享如何寫Python裝飾器程式設計師Python
- 好程式設計師Python培訓分享Python爬蟲工具列表大全程式設計師Python爬蟲
- 好程式設計師Python培訓分享Python爬蟲相關框架程式設計師Python爬蟲框架
- 好程式設計師Python培訓分享Python系列之分支結構程式設計師Python
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Python培訓分享Python如何呼叫RPC介面程式設計師PythonRPC
- 好程式設計師Python培訓分享Python配置gRPC環境程式設計師PythonRPC
- 好程式設計師Python培訓分享學Python要注意什麼程式設計師Python
- 好程式設計師大資料培訓分享之《MySQL資料庫》常用函式整理程式設計師大資料MySql資料庫函式
- 好程式設計師大資料培訓簡述Hadoop常見問題程式設計師大資料Hadoop
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師web前端培訓分享JavaScript框架J程式設計師Web前端JavaScript框架
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML