<span id="35v3v"><th id="35v3v"></th></span>
<address id="35v3v"></address>

    <address id="35v3v"></address>
      <address id="35v3v"><listing id="35v3v"><meter id="35v3v"></meter></listing></address>
        <listing id="35v3v"><listing id="35v3v"></listing></listing>

        <listing id="35v3v"><listing id="35v3v"><menuitem id="35v3v"></menuitem></listing></listing>

        <noframes id="35v3v"><noframes id="35v3v">
        當前位置: 首頁 / 技術分享 / 正文
        好程序員Python培訓分享簡述fetchone()函數

        2020-10-30

        Python培訓

          fetchone()函數報'NoneType' object is not subscriptable的錯誤今天有人向好程序員Python培訓老師請教一道python操作mysql的題,我也是差一點掉坑里去了。題是這樣的:python操作數據庫,實現用戶的注冊登陸功能。其中最主要的是數據庫的存入和讀取。

        Python2

        其中一段代碼如下:

        #查詢與用戶名對應的密碼

        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():將只取最上面的diyi條結果,返回單個元組如('id','title'),然后多次使用cursor.fetchone(),依次取得下一條結果,直到為空。

        cursor.fetchall() :將返回所有結果,返回二維元組,如(('id','title'),('id','title')),

        如果select本身取的時候只有一條數據時:

        cursor.fetchone():將只返回一條結果,返回單個元組如('id','title')。

        cursor.fetchall() :也將返回所有結果,返回二維元組,如(('id','title'),),

        備注:其中的idtitle為具體的內容

        pythonmysql在使用fetchall或者是fetchone時,綜合起來講,fetchall返回二維元組(元組中含有元組),fetchone只返回一維元組。

        好程序員公眾號

        • · 剖析行業發展趨勢
        • · 匯聚企業項目源碼

        好程序員開班動態

        More+
        • HTML5大前端 <高端班>

          開班時間:2021-04-12(深圳)

          開班盛況

          開班時間:2021-05-17(北京)

          開班盛況
        • 大數據+人工智能 <高端班>

          開班時間:2021-03-22(杭州)

          開班盛況

          開班時間:2021-04-26(北京)

          開班盛況
        • JavaEE分布式開發 <高端班>

          開班時間:2021-05-10(北京)

          開班盛況

          開班時間:2021-02-22(北京)

          開班盛況
        • Python人工智能+數據分析 <高端班>

          開班時間:2021-07-12(北京)

          預約報名

          開班時間:2020-09-21(上海)

          開班盛況
        • 云計算開發 <高端班>

          開班時間:2021-07-12(北京)

          預約報名

          開班時間:2019-07-22(北京)

          開班盛況
        在線咨詢
        試聽
        入學教程
        立即報名

        Copyright 2011-2020 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

        黑人100部Av解禁片
        <span id="35v3v"><th id="35v3v"></th></span>
        <address id="35v3v"></address>

          <address id="35v3v"></address>
            <address id="35v3v"><listing id="35v3v"><meter id="35v3v"></meter></listing></address>
              <listing id="35v3v"><listing id="35v3v"></listing></listing>

              <listing id="35v3v"><listing id="35v3v"><menuitem id="35v3v"></menuitem></listing></listing>

              <noframes id="35v3v"><noframes id="35v3v">