>> #導(dǎo)入模塊 >>> import MySQLdb >>> #連接數(shù)據(jù)庫(kù) >>> conn = MySQLdb.co" />

国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫(kù)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:40:24
文檔

跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫(kù)

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

回顧一下已有的戰(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)在看到的查詢結(jié)果中,可以顯示漢字。否則,就看到的是一堆你不懂的碼子了。如果看官遇到,請(qǐng)不要慌張,只需要修改字符編碼即可。怎么改?請(qǐng)google。網(wǎng)上很多。

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

查詢數(shù)據(jù)

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

代碼如下:


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

這說(shuō)明從users表匯總查詢出來(lái)了7條記錄。但是,這似乎有點(diǎn)不友好,告訴我7條記錄查出來(lái)了,但是在哪里呢,看前面在'mysql>'下操作查詢命令的時(shí)候,一下就把7條記錄列出來(lái)了。怎么顯示python在這里的查詢結(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)將查詢到的記錄(把他們看做對(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'\u8001\u9f50', u'9988', u'qiwsir@gmail.com')

很好。果然是逐條顯示出來(lái)了。列位注意,第七條中的u'\u8001\u95f5',這里是漢字,只不過(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'\u8001\u9f50', u'9988', u'qiwsir@gmail.com'))

原來(lái),用cur.execute()從數(shù)據(jù)庫(kù)查詢出來(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)行了查詢語(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ì)觀察,上面的方式是讓指針相對(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'\u8001\u9f50', '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ù)中第二條的用戶名修改為mypython了,用的就是update語(yǔ)句。

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

代碼如下:


>>> conn.commit()

這就大事完吉了。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫(kù)

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

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top
主站蜘蛛池模板: 国产一区二区精品久久凹凸 | 免费观看欧美一区二区三区 | 91欧美在线 | 欧美成人免费高清二区三区 | 欧美亚洲综合在线观看 | 啪啪综合网 | 全免费一级午夜毛片 | 特黄日韩免费一区二区三区 | 亚洲欧美视屏 | 国内久久 | 亚洲伊人国产 | 久久91精品国产91久久小草 | 亚洲第一视频网 | 欧美国产日韩一区二区三区 | 亚洲欧洲精品成人久久曰 | 久久伊人五月天 | 91精品国产亚一区二区三区 | 色综合欧美综合天天综合 | 亚洲国产欧美91 | 夜精品a一区二区三区 | 日本国产在线观看 | 国产综合社区 | 国产伦精品一区二区三区 | 在线视频 亚洲 | 欧美午夜影院 | 亚洲精品自产拍在线观看app | 久久一区二区精品综合 | 日本六十路丰满老太交尾 | 在线观看黄a大片爽爽影院免费 | 高清国产美女一级a毛片 | 欧美亚洲国产精品久久久 | 一级毛片一级毛片一级级毛片 | 99热成人精品免费久久 | 狠狠色狠狠色综合日日不卡 | 亚洲天堂欧美 | 欧美午夜在线 | 国模大胆一区二区三区 | 国产91精品对白露脸全集观看 | 国偷自产一区二区免费视频 | 久久久91精品国产一区二区 | 亚洲国产精久久久久久久 |