国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

[零基礎(chǔ)學(xué)python]用Python操作數(shù)據(jù)庫(kù)(2)

susheng / 3194人閱讀

摘要:那就在進(jìn)入到數(shù)據(jù)庫(kù),看看。查詢(xún)數(shù)據(jù)在前面操作的基礎(chǔ)上,如果要從數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù),當(dāng)然也可以用指針來(lái)操作了。從操作中看出來(lái)了,已經(jīng)將數(shù)據(jù)庫(kù)中第二條的用戶(hù)名修改為了,用的就是語(yǔ)句。不過(guò),要真的實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中更新,還要運(yùn)行這就大事完吉了。

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

>>> #導(dǎo)入模塊
>>> import MySQLdb

>>> #連接數(shù)據(jù)庫(kù)
>>> 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()

如果看官跟我似的,有點(diǎn)強(qiáng)迫癥,總是想我得看到數(shù)據(jù)中有了,才放芳心呀。那就在進(jìn)入到數(shù)據(jù)庫(kù),看看。

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)

剛才溫故的時(shí)候,插入的那條記錄也赫然在目。不過(guò)這里特別提醒看官,我在前面建立這個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表的時(shí)候,就已經(jīng)設(shè)定好了字符編碼為utf8,所以,在現(xiàn)在看到的查詢(xún)結(jié)果中,可以顯示漢字。否則,就看到的是一堆你不懂的碼子了。如果看官遇到,請(qǐng)不要慌張,只需要修改字符編碼即可。怎么改?請(qǐng)google。網(wǎng)上很多。

溫故結(jié)束,開(kāi)始知新。

查詢(xún)數(shù)據(jù)

在前面操作的基礎(chǔ)上,如果要從數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù),當(dāng)然也可以用指針來(lái)操作了。

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

這說(shuō)明從users表匯總查詢(xún)出來(lái)了7條記錄。但是,這似乎有點(diǎn)不友好,告訴我7條記錄查出來(lái)了,但是在哪里呢,看前面在"mysql>"下操作查詢(xún)命令的時(shí)候,一下就把7條記錄列出來(lái)了。怎么顯示python在這里的查詢(xún)結(jié)果呢?

原來(lái),在指針實(shí)例中,還要用這樣的方法,才能實(shí)現(xiàn)上述想法:

fetchall(self):接收全部的返回結(jié)果行.

fetchmany(size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會(huì)返回cursor.arraysize條數(shù)據(jù).

fetchone():返回一條結(jié)果行.

scroll(value, mode="relative"):移動(dòng)指針到某一行.如果mode="relative",則表示從當(dāng)前所在行移動(dòng)value條,如果mode="absolute",則表示從結(jié)果集的第一行移動(dòng)value條.

按照這些規(guī)則,嘗試:

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

到這里,還沒(méi)有看到什么,其實(shí)已經(jīng)將查詢(xún)到的記錄(把他們看做對(duì)象)賦值給變量lines了。如果要把它們顯示出來(lái),就要用到曾經(jīng)學(xué)習(xí)過(guò)的循環(huán)語(yǔ)句了。

>>> 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"u8001u9f50", u"9988", u"qiwsir@gmail.com")

很好。果然是逐條顯示出來(lái)了。列位注意,第七條中的u"u8001u95f5",這里是漢字,只不過(guò)由于我的shell不能顯示罷了,不必驚慌,不必搭理它。

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

>>> 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")

為了對(duì)上述過(guò)程了解深入,做下面實(shí)驗(yàn):

>>> 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"u8001u9f50", u"9988", u"qiwsir@gmail.com"))

原來(lái),用cur.execute()從數(shù)據(jù)庫(kù)查詢(xún)出來(lái)的東西,被“保存在了cur所能找到的某個(gè)地方”,要找出這些被保存的東西,需要用cur.fetchall()(或者fechone等),并且找出來(lái)之后,做為對(duì)象存在。從上面的實(shí)驗(yàn)探討發(fā)現(xiàn),被保存的對(duì)象是一個(gè)tuple中,里面的每個(gè)元素,都是一個(gè)一個(gè)的tuple。因此,用for循環(huán)就可以一個(gè)一個(gè)拿出來(lái)了。

看官是否理解其內(nèi)涵了?

接著看,還有神奇的呢。

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

>>> print cur.fetchall()
()

暈了!怎么什么是空?不是說(shuō)做為對(duì)象已經(jīng)存在了內(nèi)存中了嗎?難道這個(gè)內(nèi)存中的對(duì)象是一次有效嗎?

不要著急。

通過(guò)指針找出來(lái)的對(duì)象,在讀取的時(shí)候有一個(gè)特點(diǎn),就是那個(gè)指針會(huì)移動(dòng)。在第一次操作了print cur.fetchall()后,因?yàn)槭菍⑺械亩即蛴〕鰜?lái),指針就要從第一條移動(dòng)到最后一條。當(dāng)print結(jié)束之后,指針已經(jīng)在最后一條的后面了。接下來(lái)如果再次打印,就空了,最后一條后面沒(méi)有東西了。

下面還要實(shí)驗(yàn),檢驗(yàn)上面所說(shuō):

>>> 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")

這次我不一次全部打印出來(lái)了,而是一次打印一條,看官可以從結(jié)果中看出來(lái),果然那個(gè)指針在一條一條向下移動(dòng)呢。注意,我在這次實(shí)驗(yàn)中,是重新運(yùn)行了查詢(xún)語(yǔ)句。

那么,既然在操作存儲(chǔ)在內(nèi)存中的對(duì)象時(shí)候,指針會(huì)移動(dòng),能不能讓指針向上移動(dòng),或者移動(dòng)到指定位置呢?這就是那個(gè)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")

果然,這個(gè)函數(shù)能夠移動(dòng)指針,不過(guò)請(qǐng)仔細(xì)觀(guān)察,上面的方式是讓指針相對(duì)與當(dāng)前位置向上或者向下移動(dòng)。即:

cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相對(duì)當(dāng)前位置向上或者向下移動(dòng),n為正數(shù),表示向下(向前),n為負(fù)數(shù),表示向上(向后)

還有一種方式,可以實(shí)現(xiàn)“絕對(duì)”移動(dòng),不是“相對(duì)”移動(dòng):增加一個(gè)參數(shù)"absolute"

特別提醒看官注意的是,在python中,序列對(duì)象是的順序是從0開(kāi)始的。

>>> cur.scroll(2,"absolute")    #回到序號(hào)是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")    #回到序號(hào)是0,即指向tuple的第一條
>>> print cur.fetchone()
(1L, u"qiwsir", u"123123", u"qiwsir@gmail.com")

至此,已經(jīng)熟悉了cur.fetchall()和cur.fetchone()以及cur.scroll()幾個(gè)方法,還有另外一個(gè),接這上邊的操作,也就是指針在序號(hào)是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"))

上面這個(gè)操作,就是實(shí)現(xiàn)了從當(dāng)前位置(指針指向tuple的序號(hào)為1的位置,即第二條記錄)開(kāi)始,含當(dāng)前位置,向下列出3條記錄。

讀取數(shù)據(jù),好像有點(diǎn)啰嗦呀。細(xì)細(xì)琢磨,還是有道理的。你覺(jué)得呢?

不過(guò),python總是能夠?yàn)槲覀冎氲模闹羔樚峁┝艘粋€(gè)參數(shù),可以實(shí)現(xiàn)將讀取到的數(shù)據(jù)變成字典形式,這樣就提供了另外一種讀取方式了。

>>> 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"u8001u9f50", "password": u"9988", "id": 7L, "email": u"qiwsir@gmail.com"})     

這樣,在元組里面的元素就是一個(gè)一個(gè)字典。可以這樣來(lái)操作這個(gè)對(duì)象:

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

根據(jù)字典對(duì)象的特點(diǎn)來(lái)讀取了“鍵-值”。

更新數(shù)據(jù)

經(jīng)過(guò)前面的操作,這個(gè)就比較簡(jiǎn)單了,不過(guò)需要提醒的是,如果更新完畢,和插入數(shù)據(jù)一樣,都需要commit()來(lái)提交保存。

>>> 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")

從操作中看出來(lái)了,已經(jīng)將數(shù)據(jù)庫(kù)中第二條的用戶(hù)名修改為mypython了,用的就是update語(yǔ)句。

不過(guò),要真的實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中更新,還要運(yùn)行:

>>> conn.commit()

這就大事完吉了。


在我的網(wǎng)站上,有完整的本教程目錄,邀請(qǐng)您光臨,并不吝賜教:www.itdiffer.com

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/37429.html

相關(guān)文章

  • [基礎(chǔ)學(xué)python]Python操作數(shù)據(jù)庫(kù)(3)

    摘要:用選擇要操作的數(shù)據(jù)庫(kù),然后通過(guò)指針就可以操作這個(gè)數(shù)據(jù)庫(kù)了。這樣就在這個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)名為的表這是查看表的方式。樹(shù)欲靜而風(fēng)不止,小偷在行動(dòng)。所以,要特別提醒諸位注意。 通過(guò)python操作數(shù)據(jù)庫(kù)的行為,除了能夠完成前面兩講中的操作之外(當(dāng)然,那是比較常用的),其實(shí)任何對(duì)數(shù)據(jù)庫(kù)進(jìn)行的操作,都能夠通過(guò)python-mysqldb來(lái)實(shí)現(xiàn)。 建立數(shù)據(jù)庫(kù) 在《用python操作數(shù)據(jù)庫(kù)(1)...

    BDEEFE 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]有容乃大的list(1)

    摘要:定義在中,用方括號(hào)表示一個(gè),在方括號(hào)里面,可以是,也可以是類(lèi)型的數(shù)據(jù),甚至也能夠是這種布爾值。前面在對(duì)進(jìn)行操作的時(shí)候,有一些內(nèi)置函數(shù),比如,這是去掉左右空格的內(nèi)置函數(shù),也是的方法。 前面的學(xué)習(xí)中,我們已經(jīng)知道了兩種python的數(shù)據(jù)類(lèi)型:int和str。再?gòu)?qiáng)調(diào)一下對(duì)數(shù)據(jù)類(lèi)型的理解,這個(gè)世界是由數(shù)據(jù)組成的,數(shù)據(jù)可能是數(shù)字(注意,別搞混了,數(shù)字和數(shù)據(jù)是有區(qū)別的),也可能是文字、或者是聲音、...

    lewif 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)Python]正規(guī)地說(shuō)一句話(huà)

    摘要:語(yǔ)句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個(gè)元素。與配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。表示此行為空,不運(yùn)行任何操作。在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。恭請(qǐng)到上瀏覽及時(shí)更新的教程零基礎(chǔ)學(xué) 小孩子剛剛開(kāi)始學(xué)說(shuō)話(huà)的時(shí)候,常常是一個(gè)字一個(gè)字地開(kāi)始學(xué),比如學(xué)說(shuō)餃子,對(duì)他/她來(lái)講,似乎有點(diǎn)難度,大人也聰明,于是就簡(jiǎn)化了,用餃餃來(lái)代替,其實(shí)就是讓孩子學(xué)會(huì)一個(gè)字就能表達(dá)。當(dāng)然...

    Freeman 評(píng)論0 收藏0
  • 基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)

    摘要:楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類(lèi)信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)Python]有點(diǎn)簡(jiǎn)約的元組

    摘要:關(guān)于元組,上一講中涉及到了這個(gè)名詞。元組是用圓括號(hào)括起來(lái)的,其中的元素之間用逗號(hào)隔開(kāi)。使用而不是如同擁有一個(gè)隱含的語(yǔ)句,說(shuō)明這一數(shù)據(jù)是常量。必須是不可變的。只有字符串整數(shù)或其它對(duì)安全的才可以用作。 關(guān)于元組,上一講中涉及到了這個(gè)名詞。本講完整地講述它。 先看一個(gè)例子: >>>#變量引用str >>> s = abc >>> s abc >>>#如果這樣寫(xiě),就會(huì)是... >>> t...

    leap_frog 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]Python計(jì)算

    摘要:一提到計(jì)算機(jī),當(dāng)然現(xiàn)在更多人把她叫做電腦,這兩個(gè)詞都是指。乃至于,有的人在口語(yǔ)中區(qū)分不開(kāi)計(jì)算機(jī)和計(jì)算器。那么,做為零基礎(chǔ)學(xué)習(xí)這,也就從計(jì)算小學(xué)數(shù)學(xué)題目開(kāi)始吧。因?yàn)閺倪@里開(kāi)始,數(shù)學(xué)的基礎(chǔ)知識(shí)列為肯定過(guò)關(guān)了。 一提到計(jì)算機(jī),當(dāng)然現(xiàn)在更多人把她叫做電腦,這兩個(gè)詞都是指computer。不管什么,只要提到她,普遍都會(huì)想到她能夠比較快地做加減乘除,甚至乘方開(kāi)方等。乃至于,有的人在口語(yǔ)中區(qū)分不開(kāi)計(jì)...

    testbird 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<