摘要:使用進(jìn)行數(shù)據(jù)庫(kù)的操作前奏為了能操作數(shù)據(jù)庫(kù),首先我們要有一個(gè)數(shù)據(jù)庫(kù),所以要首先安裝,然后創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù)用以后面的測(cè)試使用導(dǎo)入數(shù)據(jù)庫(kù)模塊連接數(shù)據(jù)庫(kù)在這里,我們雖然拿到了的數(shù)據(jù)庫(kù)連接,但是不能在這個(gè)對(duì)象上直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,還需要獲取對(duì)應(yīng)的
使用Python 進(jìn)行數(shù)據(jù)庫(kù)的操作
前奏為了能操作數(shù)據(jù)庫(kù), 首先我們要有一個(gè)數(shù)據(jù)庫(kù), 所以要首先安裝Mysql, 然后創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù)python_test用以后面的測(cè)試使用
CREATE DATABASE `python_test` CHARSET UTF8導(dǎo)入數(shù)據(jù)庫(kù)模塊
import MySQLdb連接數(shù)據(jù)庫(kù)
con = MySQLdb.connect(host="localhost", user="root", passwd="******",db="python_test",port=3306)
在這里, 我們雖然拿到了python的數(shù)據(jù)庫(kù)連接, 但是不能在這個(gè)對(duì)象上直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作, 還需要獲取對(duì)應(yīng)的操作游標(biāo)才能進(jìn)行數(shù)據(jù)庫(kù)的操作,所以還需要進(jìn)行下面的操作
cur = con.cursor()創(chuàng)建表格
cur.execute("create table stu_info (name char(128) not null default "", age tinyint(3) not null default 0, sex enum("man","femal") not null default "man") engine=innodb charset=utf8") #0L
cur.execute 返回執(zhí)行的sql 影響的行數(shù), 因?yàn)檫@里是創(chuàng)建數(shù)據(jù)庫(kù), 所以是0L行
但到這里還并沒(méi)有真正執(zhí)行了sql語(yǔ)句, 必須使用MySQLdb.commit才是真正執(zhí)行完畢
con.commit()
到這里, 我們的表格才算真正創(chuàng)建完成
同理, 往表中寫數(shù)據(jù), 也是一樣的操作流程 execute ==> commit
不過(guò), 寫入數(shù)據(jù)的execute 稍有不同, 如下
更新表數(shù)據(jù)往表中寫入數(shù)據(jù)時(shí), 執(zhí)行execute 方法, 有兩種方式, 一種是直接execute(sql), 然后commit 完成, sql里是寫入的sql 語(yǔ)句
cur.execute("insert into stu_info (name, age, sex) values ("Yi_Zhi_Yu",25,"man")") con.commit()
這會(huì)直接寫入表中,但還有另外一種方式.
execute 可以接受兩個(gè)參數(shù), 第一個(gè)參數(shù)是sql語(yǔ)句, 不過(guò)這個(gè)sql中的values的內(nèi)容使用占位符%s表示,第二個(gè)參數(shù)是實(shí)際的寫入的values列表, 如下:
cur.execute("insert into stu_info (name, age, sex) values (%s,%s,%s)", ("Tony",25, "man")) con.commit()
這種方式與第一中方式相比, 更清晰一些, 安全性也更好, 能有效防止sql注入
另外, cursor還有一個(gè)executemany, 參數(shù)和execute一樣, 不過(guò)第二個(gè)參數(shù)可以傳遞多列表值, 達(dá)到多次執(zhí)行某個(gè)語(yǔ)句的效果
cur.executemany("insert into stu_info (name, age, sex) values (%s,%s,%s)",(("LiMei",26,"femal"),("YuanYuan",28,"femal"))) con.commit()
這里實(shí)際上就是執(zhí)行了兩次插入操作
數(shù)據(jù)查詢直接看例子
cur.execute("select * from stu_info") stus = cur.fetchall()
#stus 已經(jīng)是查詢的結(jié)果結(jié)合了, 格式如下:
(("Yi_Zhi_Yu", 25, "man"), ("Tony", 25, "man"), ("LiMei", 26, "femal"), ("YuanYuan", 28, "femal"))
tuple形式, 我們可以通過(guò)循環(huán)輸出
for stu in stus: print "name: %s; age: %d; sex: %s" %(stu[0], stu[1], stu[2])
輸出:
name: Yi_Zhi_Yu; age: 25; sex: man name: Tony; age: 25; sex: man name: LiMei; age: 26; sex: femal name: YuanYuan; age: 28; sex: femal
那上面的查詢雖然得到了每行的數(shù)據(jù), 但結(jié)果集中并沒(méi)有字段名, 如果要返回字段名, 如下操作:
cur = con.cursor(cursorclass=MySQLdb.cursors.DictCursor) cur.execute("select * from stu_info") cur.fetchall()
返回的結(jié)果集:
({"age": 25, "name": "Yi_Zhi_Yu", "sex": "man"}, {"age": 25, "name": "Tony", "sex": "man"}, {"age": 26, "name": "LiMei", "sex": "femal"}, {"age": 28, "name": "YuanYuan", "sex": "femal"})
每個(gè)元素都是一個(gè)dict, 以key-value的形式展示了每個(gè)字段和對(duì)應(yīng)的值
總結(jié)Python 中對(duì)數(shù)據(jù)的操作, 增刪改均要在指針對(duì)象執(zhí)行了sql語(yǔ)句后, 使用連接對(duì)象commit, 查詢的結(jié)果使用指針對(duì)象的fetch系列方法獲取
PS: 以上皆為學(xué)習(xí)筆記, 難免有錯(cuò), 歡迎指正
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/37593.html
摘要:的安裝博客補(bǔ)充知識(shí)年最新安裝教程,滾雪球?qū)W第四季。操作操作數(shù)據(jù)庫(kù)一般被程序員成為操作增刪改查,其中各個(gè)字符分別代表新增,讀取,更新,刪除??梢苑祷厥苡绊懶袛?shù),可以直接通過(guò)該值判斷是否修改成功。 ...
摘要:操作數(shù)據(jù)庫(kù)要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,需要先連接它。執(zhí)行后返回值為受影響的行數(shù)。執(zhí)行單條語(yǔ)句但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù)返回值為受影響的行數(shù)例如,要在數(shù)據(jù)表中插入一條記錄,使得,這樣做沒(méi)有報(bào)錯(cuò),并且返回一個(gè)結(jié)果,說(shuō)明有一行記錄操作成功。 在上一講中已經(jīng)連接了數(shù)據(jù)庫(kù)。就數(shù)據(jù)庫(kù)而言,連接之后就要對(duì)其操作。但是,目前那個(gè)名字叫做qiwsirtest的數(shù)據(jù)僅僅是空架子,沒(méi)有什么可操作的,要操作它,就必...
摘要:用來(lái)編寫網(wǎng)站,必須要能夠通過(guò)操作數(shù)據(jù)庫(kù),所謂操作數(shù)據(jù)庫(kù),就是通過(guò)實(shí)現(xiàn)對(duì)數(shù)據(jù)的連接,以及對(duì)記錄字段的各種操作。交互模式下操作數(shù)據(jù)庫(kù)之連接數(shù)據(jù)庫(kù)操作數(shù)據(jù)庫(kù)的前提是先有數(shù)據(jù)庫(kù)。先建立一個(gè)數(shù)據(jù)庫(kù)。 用Python來(lái)編寫網(wǎng)站,必須要能夠通過(guò)python操作數(shù)據(jù)庫(kù),所謂操作數(shù)據(jù)庫(kù),就是通過(guò)python實(shí)現(xiàn)對(duì)數(shù)據(jù)的連接,以及對(duì)記錄、字段的各種操作。上一講提到的那種操作方式,是看官直接通過(guò)交互模式來(lái)操...
摘要:用選擇要操作的數(shù)據(jù)庫(kù),然后通過(guò)指針就可以操作這個(gè)數(shù)據(jù)庫(kù)了。這樣就在這個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)名為的表這是查看表的方式。樹欲靜而風(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)...
摘要:模塊提供的是類似于接口的,而模塊在基礎(chǔ)上又做了進(jìn)一步封裝,使之符合的數(shù)據(jù)庫(kù)規(guī)范。的數(shù)據(jù)庫(kù)規(guī)范建議了種不同的方式來(lái)構(gòu)造,只支持其中的一種,代碼類似于的格式化操作。提交修改,回滾。異常發(fā)生時(shí),調(diào)用進(jìn)行回滾。 NOTE(2017-11-18): MySQLdb 不支持 Python 3,而 Python 3 是主流,所以就沒(méi)有學(xué)習(xí)的必要了。 環(huán)境:MySQL 5.6.27, Ubuntu 1...
閱讀 1994·2021-09-23 11:21
閱讀 1775·2019-08-29 17:27
閱讀 1131·2019-08-29 17:03
閱讀 811·2019-08-29 15:07
閱讀 2016·2019-08-29 11:13
閱讀 2455·2019-08-26 12:14
閱讀 1064·2019-08-26 11:52
閱讀 1795·2019-08-23 17:09