使用Python操作MySQL的一些基本方法
前奏
為了能操作數(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)建完成
同理, 往表中寫(xiě)數(shù)據(jù), 也是一樣的操作流程 execute ==> commit
不過(guò), 寫(xiě)入數(shù)據(jù)的execute 稍有不同, 如下
更新表數(shù)據(jù)
往表中寫(xiě)入數(shù)據(jù)時(shí), 執(zhí)行execute 方法, 有兩種方式, 一種是直接execute(sql), 然后commit 完成, sql里是寫(xiě)入的sql 語(yǔ)句
cur.execute("insert into stu_info (name, age, sex) values ('Yi_Zhi_Yu',25,'man')") con.commit()
這會(huì)直接寫(xiě)入表中,但還有另外一種方式,
execute 可以接受兩個(gè)參數(shù), 第一個(gè)參數(shù)是sql語(yǔ)句, 不過(guò)這個(gè)sql中的values的內(nèi)容使用占位符%s表示,第二個(gè)參數(shù)是實(shí)際的寫(xiě)入的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ò), 歡迎指正
- Python操作MySQL數(shù)據(jù)庫(kù)9個(gè)實(shí)用實(shí)例
- Python操作Mysql實(shí)例代碼教程在線版(查詢手冊(cè))
- python操作mysql中文顯示亂碼的解決方法
- python連接mysql數(shù)據(jù)庫(kù)示例(做增刪改操作)
- Python2.7簡(jiǎn)單連接與操作MySQL的方法
- Python3實(shí)現(xiàn)的Mysql數(shù)據(jù)庫(kù)操作封裝類
- python操作MySQL數(shù)據(jù)庫(kù)的方法分享
- Python操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單步驟分享
相關(guān)文章
Python基于數(shù)列實(shí)現(xiàn)購(gòu)物車(chē)程序過(guò)程詳解
這篇文章主要介紹了Python基于數(shù)列實(shí)現(xiàn)購(gòu)物車(chē)程序過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python chardet庫(kù)識(shí)別編碼原理解析
這篇文章主要介紹了python chardet庫(kù)識(shí)別編碼原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02基于Numpy.convolve使用Python實(shí)現(xiàn)滑動(dòng)平均濾波的思路詳解
這篇文章主要介紹了Python極簡(jiǎn)實(shí)現(xiàn)滑動(dòng)平均濾波(基于Numpy.convolve)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05Python實(shí)現(xiàn)上下班搶個(gè)順風(fēng)單腳本
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)上下班搶個(gè)順風(fēng)單腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02python實(shí)踐項(xiàng)目之監(jiān)控當(dāng)前聯(lián)網(wǎng)狀態(tài)詳情
介紹一個(gè)利用Python監(jiān)控當(dāng)前聯(lián)網(wǎng)狀態(tài)情況的python代碼,它可以清楚地知道,你的電腦網(wǎng)絡(luò)是否是鏈接成功或失敗,下面小編帶大家來(lái)一起學(xué)習(xí)它2019-05-05