>> #導入模塊 >>> import MySQLdb >>> #連接數據庫 >>> conn = MySQLdb.co" />

<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        跟老齊學Python之使用Python查詢更新數據庫

        來源:懂視網 責編:小采 時間:2020-11-27 14:40:24
        文檔

        跟老齊學Python之使用Python查詢更新數據庫

        跟老齊學Python之使用Python查詢更新數據庫:回顧一下已有的戰果:(1)連接數據庫;(2)建立指針;(3)通過指針插入記錄;(4)提交將插入結果保存到數據庫。在交互模式中,先溫故,再知新。 代碼如下: >>> #導入模塊 >>> import MySQLdb >>> #連接數據庫 >>> conn = MySQLdb.co
        推薦度:
        導讀跟老齊學Python之使用Python查詢更新數據庫:回顧一下已有的戰果:(1)連接數據庫;(2)建立指針;(3)通過指針插入記錄;(4)提交將插入結果保存到數據庫。在交互模式中,先溫故,再知新。 代碼如下: >>> #導入模塊 >>> import MySQLdb >>> #連接數據庫 >>> conn = MySQLdb.co

        回顧一下已有的戰果:(1)連接數據庫;(2)建立指針;(3)通過指針插入記錄;(4)提交將插入結果保存到數據庫。在交互模式中,先溫故,再知新。

        代碼如下:


        >>> #導入模塊
        >>> import MySQLdb

        >>> #連接數據庫
        >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",port=3036,charset="utf8")

        >>> #建立指針
        >>> cur = conn.cursor()

        >>> #插入記錄
        >>> cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("老齊","9988","qiwsir@gmail.com"))
        1L

        >>> #提交保存
        >>> conn.commit()


        如果看官跟我似的,有點強迫癥,總是想我得看到數據中有了,才放芳心呀。那就在進入到數據庫,看看。

        代碼如下:


        mysql> select * from users;
        +----+----------+----------+------------------+
        | id | username | password | email |
        +----+----------+----------+------------------+
        | 1 | qiwsir | 123123 | qiwsir@gmail.com |
        | 2 | python | 123456 | python@gmail.com |
        | 3 | google | 111222 | g@gmail.com |
        | 4 | facebook | 222333 | f@face.book |
        | 5 | github | 333444 | git@hub.com |
        | 6 | docker | 444555 | doc@ker.com |
        | 7 | 老齊 | 9988 | qiwsir@gmail.com |
        +----+----------+----------+------------------+
        7 rows in set (0.00 sec)

        剛才溫故的時候,插入的那條記錄也赫然在目。不過這里特別提醒看官,我在前面建立這個數據庫和數據表的時候,就已經設定好了字符編碼為utf8,所以,在現在看到的查詢結果中,可以顯示漢字。否則,就看到的是一堆你不懂的碼子了。如果看官遇到,請不要慌張,只需要修改字符編碼即可。怎么改?請google。網上很多。

        溫故結束,開始知新。

        查詢數據

        在前面操作的基礎上,如果要從數據庫中查詢數據,當然也可以用指針來操作了。

        代碼如下:


        >>> cur.execute("select * from users")
        7L

        這說明從users表匯總查詢出來了7條記錄。但是,這似乎有點不友好,告訴我7條記錄查出來了,但是在哪里呢,看前面在'mysql>'下操作查詢命令的時候,一下就把7條記錄列出來了。怎么顯示python在這里的查詢結果呢?

        原來,在指針實例中,還要用這樣的方法,才能實現上述想法:

        fetchall(self):接收全部的返回結果行.
        fetchmany(size=None):接收size條返回結果行.如果size的值大于返回的結果行的數量,則會返回cursor.arraysize條數據.
        fetchone():返回一條結果行.
        scroll(value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一行移動value條.
        按照這些規則,嘗試:

        代碼如下:


        >>> cur.execute("select * from users")
        7L
        >>> lines = cur.fetchall()

        到這里,還沒有看到什么,其實已經將查詢到的記錄(把他們看做對象)賦值給變量lines了。如果要把它們顯示出來,就要用到曾經學習過的循環語句了。

        代碼如下:


        >>> for line in lines:
        ... print line
        ...
        (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com')
        (2L, u'python', u'123456', u'python@gmail.com')
        (3L, u'google', u'111222', u'g@gmail.com')
        (4L, u'facebook', u'222333', u'f@face.book')
        (5L, u'github', u'333444', u'git@hub.com')
        (6L, u'docker', u'444555', u'doc@ker.com')
        (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com')

        很好。果然是逐條顯示出來了。列位注意,第七條中的u'\u8001\u95f5',這里是漢字,只不過由于我的shell不能顯示罷了,不必驚慌,不必搭理它。

        只想查出第一條,可以嗎?當然可以!看下面的:

        代碼如下:


        >>> cur.execute("select * from users where id=1")
        1L
        >>> line_first = cur.fetchone() #只返回一條
        >>> print line_first
        (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com')

        為了對上述過程了解深入,做下面實驗:

        代碼如下:


        >>> cur.execute("select * from users")
        7L
        >>> print cur.fetchall()
        ((1L, u'qiwsir', u'123123', u'qiwsir@gmail.com'), (2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book'), (5L, u'github', u'333444', u'git@hub.com'), (6L, u'docker', u'444555', u'doc@ker.com'), (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com'))

        原來,用cur.execute()從數據庫查詢出來的東西,被“保存在了cur所能找到的某個地方”,要找出這些被保存的東西,需要用cur.fetchall()(或者fechone等),并且找出來之后,做為對象存在。從上面的實驗探討發現,被保存的對象是一個tuple中,里面的每個元素,都是一個一個的tuple。因此,用for循環就可以一個一個拿出來了。

        看官是否理解其內涵了?

        接著看,還有神奇的呢。

        接著上面的操作,再打印一遍

        代碼如下:


        >>> print cur.fetchall()
        ()

        暈了!怎么什么是空?不是說做為對象已經存在了內存中了嗎?難道這個內存中的對象是一次有效嗎?

        不要著急。

        通過指針找出來的對象,在讀取的時候有一個特點,就是那個指針會移動。在第一次操作了print cur.fetchall()后,因為是將所有的都打印出來,指針就要從第一條移動到最后一條。當print結束之后,指針已經在最后一條的后面了。接下來如果再次打印,就空了,最后一條后面沒有東西了。

        下面還要實驗,檢驗上面所說:

        代碼如下:


        >>> cur.execute('select * from users')
        7L
        >>> print cur.fetchone()
        (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com')
        >>> print cur.fetchone()
        (2L, u'python', u'123456', u'python@gmail.com')
        >>> print cur.fetchone()
        (3L, u'google', u'111222', u'g@gmail.com')

        這次我不一次全部打印出來了,而是一次打印一條,看官可以從結果中看出來,果然那個指針在一條一條向下移動呢。注意,我在這次實驗中,是重新運行了查詢語句。

        那么,既然在操作存儲在內存中的對象時候,指針會移動,能不能讓指針向上移動,或者移動到指定位置呢?這就是那個scroll()

        代碼如下:


        >>> cur.scroll(1)
        >>> print cur.fetchone()
        (5L, u'github', u'333444', u'git@hub.com')
        >>> cur.scroll(-2)
        >>> print cur.fetchone()
        (4L, u'facebook', u'222333', u'f@face.book')


        果然,這個函數能夠移動指針,不過請仔細觀察,上面的方式是讓指針相對與當前位置向上或者向下移動。即:

        cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相對當前位置向上或者向下移動,n為正數,表示向下(向前),n為負數,表示向上(向后)

        還有一種方式,可以實現“絕對”移動,不是“相對”移動:增加一個參數"absolute"

        特別提醒看官注意的是,在python中,序列對象是的順序是從0開始的。

        代碼如下:


        >>> cur.scroll(2,"absolute") #回到序號是2,但指向第三條
        >>> print cur.fetchone() #打印,果然是
        (3L, u'google', u'111222', u'g@gmail.com')

        >>> cur.scroll(1,"absolute")
        >>> print cur.fetchone()
        (2L, u'python', u'123456', u'python@gmail.com')

        >>> cur.scroll(0,"absolute") #回到序號是0,即指向tuple的第一條
        >>> print cur.fetchone()
        (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com')

        至此,已經熟悉了cur.fetchall()和cur.fetchone()以及cur.scroll()幾個方法,還有另外一個,接這上邊的操作,也就是指針在序號是1的位置,指向了tuple的第二條

        代碼如下:


        >>> cur.fetchmany(3)
        ((2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book'))

        上面這個操作,就是實現了從當前位置(指針指向tuple的序號為1的位置,即第二條記錄)開始,含當前位置,向下列出3條記錄。

        讀取數據,好像有點啰嗦呀。細細琢磨,還是有道理的。你覺得呢?

        不過,python總是能夠為我們著想的,它的指針提供了一個參數,可以實現將讀取到的數據變成字典形式,這樣就提供了另外一種讀取方式了。

        代碼如下:


        >>> cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
        >>> cur.execute("select * from users")
        7L
        >>> cur.fetchall()
        ({'username': u'qiwsir', 'password': u'123123', 'id': 1L, 'email': u'qiwsir@gmail.com'}, {'username': u'mypython', 'password': u'123456', 'id': 2L, 'email': u'python@gmail.com'}, {'username': u'google', 'password': u'111222', 'id': 3L, 'email': u'g@gmail.com'}, {'username': u'facebook', 'password': u'222333', 'id': 4L, 'email': u'f@face.book'}, {'username': u'github', 'password': u'333444', 'id': 5L, 'email': u'git@hub.com'}, {'username': u'docker', 'password': u'444555', 'id': 6L, 'email': u'doc@ker.com'}, {'username': u'\u8001\u9f50', 'password': u'9988', 'id': 7L, 'email': u'qiwsir@gmail.com'})

        這樣,在元組里面的元素就是一個一個字典。可以這樣來操作這個對象:

        代碼如下:


        >>> cur.scroll(0,"absolute")
        >>> for line in cur.fetchall():
        ... print line["username"]
        ...
        qiwsir
        mypython
        google
        facebook
        github
        docker
        老齊

        根據字典對象的特點來讀取了“鍵-值”。

        更新數據

        經過前面的操作,這個就比較簡單了,不過需要提醒的是,如果更新完畢,和插入數據一樣,都需要commit()來提交保存。

        代碼如下:


        >>> cur.execute("update users set username=%s where id=2",("mypython"))
        1L
        >>> cur.execute("select * from users where id=2")
        1L
        >>> cur.fetchone()
        (2L, u'mypython', u'123456', u'python@gmail.com')

        從操作中看出來了,已經將數據庫中第二條的用戶名修改為mypython了,用的就是update語句。

        不過,要真的實現在數據庫中更新,還要運行:

        代碼如下:


        >>> conn.commit()

        這就大事完吉了。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        跟老齊學Python之使用Python查詢更新數據庫

        跟老齊學Python之使用Python查詢更新數據庫:回顧一下已有的戰果:(1)連接數據庫;(2)建立指針;(3)通過指針插入記錄;(4)提交將插入結果保存到數據庫。在交互模式中,先溫故,再知新。 代碼如下: >>> #導入模塊 >>> import MySQLdb >>> #連接數據庫 >>> conn = MySQLdb.co
        推薦度:
        標簽: 查詢 更新 數據庫
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 色屁屁www影院免费观看视频| 67194在线午夜亚洲| 亚在线观看免费视频入口| MM131亚洲国产美女久久| 亚洲av无码乱码国产精品| 在线观看免费无码专区| 成人黄18免费视频| 亚洲夂夂婷婷色拍WW47| 麻豆成人精品国产免费| 亚洲综合免费视频| 69xx免费观看视频| 一本色道久久88亚洲精品综合| 大香人蕉免费视频75| 自拍偷自拍亚洲精品偷一| 亚洲高清偷拍一区二区三区| 亚洲国产成人无码av在线播放 | 亚洲国产精品yw在线观看| 国产精品免费观看| 亚洲人成色77777在线观看| 亚洲国产91精品无码专区| 久久一区二区免费播放| 亚洲老熟女@TubeumTV| 无码中文字幕av免费放| 国产精品亚洲精品日韩电影| 野花高清在线电影观看免费视频 | 曰批免费视频播放在线看片二| 99热在线精品免费全部my| 亚洲日韩中文字幕无码一区| 亚洲国产精品人人做人人爱| 国产成人无码区免费网站| 亚洲成AV人片久久| 亚洲av中文无码| 永久在线免费观看| 亚洲国产精品婷婷久久| 在线观看视频免费国语| 三年片在线观看免费西瓜视频| 亚洲中文字幕无码亚洲成A人片| 久久亚洲2019中文字幕| 一个人免费观看视频www| jizz免费在线观看| 国产亚洲精午夜久久久久久|