MySQL(拆表顽腾、pymysql查詢)

拆表-

- 創(chuàng)建商品分類表

create table if not exists goods_cates(?

? ? id int unsigned primary key auto_increment,

? ? name varchar(40) not null-- 類別名稱 40字長度 不允許為空

);

-- 查詢goods表中商品的種類

select cate_name from goods group by cate_name;?

-- 將分組結(jié)果寫入到goods_cates數(shù)據(jù)表

insert into goods_cates (name) select cate_name from goods group by cate_name;-- select前不能加values??

-- 通過goods_cates數(shù)據(jù)表來更新goods表

update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;

-- 解釋:更新goods表起別名g —— inner join goods_cates關(guān)聯(lián)類別表 —— 給類別表起名c —— on后面相當(dāng)條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類別名稱=類別表名稱 —— set g.cate_name=c.id設(shè)置商品表的類別名稱=……

-- 通過alter table語句修改表結(jié)構(gòu)(既改名字又改類型)change:重命名

alter table goods change cate_name cate_id int unsigned not null;-- 類別的名稱cate_name重命名為cate_id

-- 關(guān)聯(lián)外鍵

alter table goods add foreign key (cate_id) references goods_cates(id);

-- 給alter table goods添加一個(gè)foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類別表的id關(guān)聯(lián)

-- 在 goods 數(shù)據(jù)表中插入商品(用來測試外鍵的)

insert into goods (name,cate_id,brand_id,price)

values('LaserJet Pro P1606dn 黑白激光打印機(jī)', 12, 4,'1849');

-- 取消外鍵

alter table goods drop foreign key goods_ibfk_1;

二患雏、goods_brands

-- unsigned:無符號(非負(fù)數(shù))

-- 創(chuàng)建商品分類表

create table if not exists goods_brands(?

? ? id int unsigned primary key auto_increment,

? ? name varchar(40) not null-- 類別名稱 40字長度 不允許為空

);

-- 查詢goods表中商品的種類

select brand_name from goods group by brand_name;

-- 將分組結(jié)果寫入到goods_cates數(shù)據(jù)表

insert into goods_brands (name) select brand_name from goods group by brand_name;-- select前不能加values??

-- 通過goods_cates數(shù)據(jù)表來更新goods表

-- 更新goods表起別名g —— inner join goods_cates關(guān)聯(lián)類別表 —— 給類別表起名c —— on后面相當(dāng)條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類別名稱=類別表名稱 —— set g.cate_name=c.id設(shè)置商品表的類別名稱=……

update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name=b.id;

-- 分別在goods_cates和goods_brands類別表中插入記錄

insert into goods_brands(name) values ('路由器'),('交換機(jī)'),('網(wǎng)卡');

-- 通過alter table語句修改表結(jié)構(gòu)(既改名字又改類型)change:重命名

alter table goods change brand_name brand_id int unsigned not null;-- 類別的名稱brand_name重命名為brand_id

-- 關(guān)聯(lián)外鍵

-- 給alter table goods添加一個(gè)foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類別表的id關(guān)聯(lián)

alter table goods add foreign key (brand_id) references goods_brands(id);

-- 在 goods 數(shù)據(jù)表中插入商品(用來測試外鍵的)

insert into goods (name,cate_id,brand_id,price)

values('LaserJet Pro P1606dn 黑白激光打印機(jī)', 12, 4,'1849');

-- 取消外鍵

alter table goods drop foreign key goods_ibfk_2;

Python 中操作 MySQL 步驟


1郭毕、引入模塊

在py文件中引入pymysql模塊

frompymysqlimport*

2浇辜、Connection 對象

用于建立與數(shù)據(jù)庫的連接

創(chuàng)建對象:調(diào)用connect()方法

conn=connect(參數(shù)列表)

參數(shù)host:連接的mysql主機(jī)朋魔,如果本機(jī)是'localhost'

參數(shù)port:連接的mysql主機(jī)的端口岖研,默認(rèn)是3306

參數(shù)database:數(shù)據(jù)庫的名稱

參數(shù)user:連接的用戶名

參數(shù)password:連接的密碼

參數(shù)charset:通信采用的編碼方式,推薦使用utf8

對象的方法

close()關(guān)閉連接

commit()提交

cursor()返回Cursor對象铺厨,用于執(zhí)行sql語句并獲得結(jié)果

3缎玫、Cursor對象

用于執(zhí)行sql語句,使用頻度最高的語句為select解滓、insert赃磨、update、delete

獲取Cursor對象:調(diào)用Connection對象的cursor()方法

cs1=conn.cursor()

對象的方法

close()關(guān)閉

execute(operation [, parameters ])執(zhí)行語句洼裤,返回受影響的行數(shù)邻辉,主要用于執(zhí)行insert、update腮鞍、delete語句值骇,也可以執(zhí)行create、alter移国、drop等語句

fetchone()執(zhí)行查詢語句時(shí)吱瘩,獲取查詢結(jié)果集的第一個(gè)行數(shù)據(jù),返回一個(gè)元組

fetchall()執(zhí)行查詢時(shí)迹缀,獲取結(jié)果集的所有行使碾,一行構(gòu)成一個(gè)元組,再將這些元組裝入一個(gè)元組返回

對象的屬性

rowcount只讀屬性祝懂,表示最近一次execute()執(zhí)行后受影響的行數(shù)

connection獲得當(dāng)前連接對象

四票摇、增刪改查

1、增刪改

frompymysqlimport*defmain():# 創(chuàng)建Connection連接conn = connect(host='localhost',port=3306,database='jd',user='root',password='mysql',charset='utf8')# 獲得Cursor對象cs1 = conn.cursor()# 執(zhí)行insert語句砚蓬,并返回受影響的行數(shù):添加一條數(shù)據(jù)# 增加count = cs1.execute('insert into goods_cates(name) values("硬盤")')#打印受影響的行數(shù)print(count)? ? count = cs1.execute('insert into goods_cates(name) values("光盤")')? ? print(count)# # 更新# count = cs1.execute('update goods_cates set name="機(jī)械硬盤" where name="硬盤"')# # 刪除# count = cs1.execute('delete from goods_cates where id=6')# 提交之前的操作矢门,如果之前已經(jīng)之執(zhí)行過多次的execute,那么就都進(jìn)行提交conn.commit()# 關(guān)閉Cursor對象cs1.close()# 關(guān)閉Connection對象conn.close()if__name__ =='__main__':? ? main()

2灰蛙、查詢一行數(shù)據(jù)

frompymysqlimport*defmain():# 創(chuàng)建Connection連接conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jd',charset='utf8')# 獲得Cursor對象cs1 = conn.cursor()# 執(zhí)行select語句祟剔,并返回受影響的行數(shù):查詢一條數(shù)據(jù)count = cs1.execute('select id,name from goods where id>=4')# 打印受影響的行數(shù)print("查詢到%d條數(shù)據(jù):"% count)foriinrange(count):# 獲取查詢的結(jié)果result = cs1.fetchone()# 打印查詢的結(jié)果print(result)# 獲取查詢的結(jié)果# 關(guān)閉Cursor對象cs1.close()? ? conn.close()if__name__ =='__main__':? ? main()

3、查詢多行數(shù)據(jù)

frompymysqlimport*defmain():# 創(chuàng)建Connection連接conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jd',charset='utf8')# 獲得Cursor對象cs1 = conn.cursor()# 執(zhí)行select語句摩梧,并返回受影響的行數(shù):查詢一條數(shù)據(jù)count = cs1.execute('select id,name from goods where id>=4')# 打印受影響的行數(shù)print("查詢到%d條數(shù)據(jù):"% count)# for i in range(count):#? ? # 獲取查詢的結(jié)果#? ? result = cs1.fetchone()#? ? # 打印查詢的結(jié)果#? ? print(result)#? ? # 獲取查詢的結(jié)果result = cs1.fetchall()? ? print(result)# 關(guān)閉Cursor對象cs1.close()? ? conn.close()if__name__ =='__main__':? ? main()

五物延、參數(shù)化

sql語句的參數(shù)化,可以有效防止sql注入

注意:此處不同于python的字符串格式化障本,全部使用%s占位

frompymysqlimport*defmain():find_name = input("請輸入物品名稱:")# 創(chuàng)建Connection連接conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')# 獲得Cursor對象cs1 = conn.cursor()# # 非安全的方式# # 輸入 " or 1=1 or "? (雙引號也要輸入)# sql = 'select * from goods where name="%s"' % find_name# print("""sql===>%s<====""" % sql)# # 執(zhí)行select語句教届,并返回受影響的行數(shù):查詢所有數(shù)據(jù)# count = cs1.execute(sql)# 安全的方式# 構(gòu)造參數(shù)列表params = [find_name]# 執(zhí)行select語句,并返回受影響的行數(shù):查詢所有數(shù)據(jù)count = cs1.execute('select * from goods where name=%s', params)# 注意:# 如果要是有多個(gè)參數(shù)驾霜,需要進(jìn)行參數(shù)化# 那么params = [數(shù)值1, 數(shù)值2....]案训,此時(shí)sql語句中有多個(gè)%s即可 # 打印受影響的行數(shù)print(count)# 獲取查詢的結(jié)果# result = cs1.fetchone()result = cs1.fetchall()# 打印查詢的結(jié)果print(result)# 關(guān)閉Cursor對象cs1.close()# 關(guān)閉Connection對象conn.close()if__name__ =='__main__':? ? main()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粪糙,隨后出現(xiàn)的幾起案子强霎,更是在濱河造成了極大的恐慌,老刑警劉巖蓉冈,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件城舞,死亡現(xiàn)場離奇詭異,居然都是意外死亡寞酿,警方通過查閱死者的電腦和手機(jī)家夺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伐弹,“玉大人拉馋,你說我怎么就攤上這事〔液茫” “怎么了煌茴?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長日川。 經(jīng)常有香客問我蔓腐,道長,這世上最難降的妖魔是什么龄句? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任回论,我火速辦了婚禮,結(jié)果婚禮上撒璧,老公的妹妹穿的比我還像新娘透葛。我一直安慰自己,他們只是感情好卿樱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布僚害。 她就那樣靜靜地躺著,像睡著了一般繁调。 火紅的嫁衣襯著肌膚如雪萨蚕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天蹄胰,我揣著相機(jī)與錄音岳遥,去河邊找鬼。 笑死裕寨,一個(gè)胖子當(dāng)著我的面吹牛裂允,可吹牛的內(nèi)容都是我干的闸与。 我是一名探鬼主播惊楼,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驾窟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起认轨,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤绅络,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嘁字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恩急,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年纪蜒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衷恭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纯续,死狀恐怖匾荆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杆烁,我是刑警寧澤牙丽,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站兔魂,受9級特大地震影響烤芦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜析校,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一构罗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧智玻,春花似錦遂唧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至页滚,卻和暖如春召边,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裹驰。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工隧熙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幻林。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓贞盯,卻偏偏與公主長得像音念,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子躏敢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一症昏、準(zhǔn)備數(shù)據(jù) 1、創(chuàng)建數(shù)據(jù)表 -- 創(chuàng)建 "京東" 數(shù)據(jù)庫createdatabasejdcharset=utf8...
    清清不快樂閱讀 194評論 0 1
  • 1 準(zhǔn)備數(shù)據(jù) 1>創(chuàng)建數(shù)據(jù)表 創(chuàng)建絲芙蘭數(shù)據(jù)庫 create database SEPHORE charset=u...
    晚冬至雪閱讀 250評論 0 0
  • 數(shù)據(jù)準(zhǔn)備 回顧 記錄操作:寫操作:INSERT,UPDATE,DELETE讀取操作:SELECT 這章主要學(xué)習(xí):子...
    齊天大圣李圣杰閱讀 1,055評論 0 4
  • 第1章 初涉MySQL 1.1 MySQL文件 (1)MySQL目錄結(jié)構(gòu) (2)MySQL配置向?qū)募ò惭b后配置...
    凜0_0閱讀 783評論 1 0
  • 一父丰、準(zhǔn)備數(shù)據(jù) 1、創(chuàng)建數(shù)據(jù)表 -- 創(chuàng)建 "京東" 數(shù)據(jù)庫createdatabasejdcharset=utf8...
    快樂托兒索閱讀 196評論 0 0