Pymysql介紹及其增刪改查
學習目標
能夠自己動手將對應的數(shù)據(jù)導入到數(shù)據(jù)庫
知道外鍵約束的作用
了解E-R模型的組成部分
能夠舉例說出生活中 1對1 1對多 多對多關系的例子
知道一個表結構設計是否滿足范式的要求
能夠說出 python 操作數(shù)據(jù)庫的步驟
能夠 connect 方法創(chuàng)建連接對象
能夠使用連接對象的 cursor()方法 創(chuàng)建游標對象
能夠使用游標對象的 execute()方法執(zhí)行 SQL 語句
能夠使用游標對象的 close()方法關閉游標對象
能夠使用連接對象的 close()方法關閉連接對象
能夠使用游標對象的 fetchall()方法取出所有數(shù)據(jù)
能夠使用游標對象的 fetchone()方法取出一條數(shù)據(jù)
能夠說出如何避免 SQL 注入問題
數(shù)據(jù)準備
1. 數(shù)據(jù)準備
創(chuàng)建數(shù)據(jù)表
插入數(shù)據(jù)
2. SQL語句強化
查詢類型cate_name為 '超極本' 的商品名稱、價格
顯示商品的種類
求所有電腦產(chǎn)品的平均價格,并且保留兩位小數(shù)
顯示每種商品的平均價格
查詢每種類型的商品中 最貴、最便宜、平均價、數(shù)量
查詢所有價格大于平均價格的商品,并且按價格降序排序
分表操作
學習目標
能夠把一個表中的數(shù)據(jù)放到多個表中
1. 分表操作步驟
問題表

由于只存在商品信息一張表 其中既有商品信息又有分類名稱和品牌名稱。當把某個商品信息刪除后,本不應該刪除的<獨立于商品信息的分類和品牌>等信息結果也隨著刪除商品信息而刪除,那么此時存在刪除異常
解決方案

如圖我們創(chuàng)建兩張表 商品種類表 商品品牌表 存儲對應的信息 就不會出現(xiàn)刪除異常了
最終效果

有了這樣的最終表,我們的商品種類和商品品牌信息就能獨立保存起來
分表操作步驟
第一步: 創(chuàng)建商品種類表
第二步: 同步數(shù)據(jù)到商品種類表中
第三步: 更新商品信息表數(shù)據(jù)
第四步: 修改商品信息表表結構

2. 根據(jù)商品表中的分類信息創(chuàng)建分類表
創(chuàng)建 "商品分類"表
由于只存在一張表 其中既有商品信息又有分類名稱和品牌名稱。當把某種分類或者品牌的商品全部刪除后,本不應該刪除<獨立于商品信息的分類和品牌>等信息結果也隨著刪除商品信息而刪除,那么此時存在刪除異常。
為解決刪除異常問題,則必須再創(chuàng)建分類表和品牌表單獨用來存儲數(shù)據(jù)。
將分類信息導入到分類表中
查詢goods表中商品的種類
將分組結果寫入到goods_cates商品種類數(shù)據(jù)表
insert?into?goods_cates?(name)?? ?select?cate_name?from?goods?group?by?cate_name;
將商品表中的分類名稱更改為分類名稱對應的分類id
通過goods_cates數(shù)據(jù)表來更新goods表
3. 根據(jù)商品表中的品牌信息創(chuàng)建品牌表
創(chuàng)建 "商品品牌表" 表并導入品牌名稱
通過create table ...select來創(chuàng)建數(shù)據(jù)表并且同時寫入記錄,一步到位
使用商品品牌表中的信息更新商品表信息
通過goods_brands數(shù)據(jù)表來更新goods數(shù)據(jù)表
4. 修改商品表表結構
查看 goods 的數(shù)據(jù)表結構,會發(fā)現(xiàn) cate_name 和 brand_name對應的類型為 varchar
通過alter table語句修改表結構
pymysql-查操作
學習目標
能夠說出 python 操作數(shù)據(jù)庫的步驟
能夠 connect 方法創(chuàng)建連接對象
能夠使用連接對象的 cursor()方法 創(chuàng)建游標對象
能夠使用游標對象的 execute()方法執(zhí)行 SQL 語句
能夠使用游標對象的 close()方法關閉游標對象
能夠使用連接對象的 close()方法關閉連接對象
1. pymysql模塊的作用
問題: 如何使用客戶端將100000行數(shù)據(jù)插入到數(shù)據(jù)庫?
回答: 大家會發(fā)現(xiàn)如果用之前客戶端幾乎是不可能完全這個任務的, 因為我們不可能去構造出那個插入10w行數(shù)據(jù)的SQL. 可是,如果我們有一個功能能夠插入一行數(shù)據(jù),借助程序強大的特點-重復,就可以輕而易舉的就將10w行數(shù)據(jù)收入麾下. 那么在Python中實現(xiàn)這樣的操作可以使用pymysql這個模塊完成.
2. Python 中操作 MySQL 步驟

操作步驟:
導入模塊
創(chuàng)建連接
創(chuàng)建游標
執(zhí)行sql
關閉游標
關閉連接
步驟詳解:
引入模塊
創(chuàng)建連接(創(chuàng)建connection連接對象)
作用: 用于建立與數(shù)據(jù)庫的連接, 調(diào)用pymysql模塊中的connect()方法.
創(chuàng)建游標(通過連接對象獲取游標) ?游標的作用: 執(zhí)行sql語句(使用頻度最高的語句為select、insert、update、delete)
獲取游標對象
執(zhí)行sql(這里需要使用游標執(zhí)行sql語句)
通過游標執(zhí)行sql
獲取結果集中的一條數(shù)據(jù)
獲取結果集中的所有數(shù)據(jù)
關閉游標
關閉連接
3. pymysql練習
總結
操作步驟:
導入模塊
創(chuàng)建連接
創(chuàng)建游標
執(zhí)行sql
關閉游標
關閉連接
pymysql-增刪改操作
學習目標
- 能夠使用游標對象完成數(shù)據(jù)庫的增刪改
1. 數(shù)據(jù)提交和數(shù)據(jù)回滾
數(shù)據(jù)提交commit
數(shù)據(jù)庫中的基本操作: 增刪改查. 上一個章節(jié)中我們知道如何完成對數(shù)據(jù)庫中數(shù)據(jù)的獲取其實也就是查, 比如獲取一條數(shù)據(jù)或者獲取所有數(shù)據(jù)等. 接下來我們學習下如何增刪改.
注意:
查數(shù)據(jù), 并不會對原有數(shù)據(jù)庫中的數(shù)據(jù)造成影響. 而增刪改這三個操作都會對原有數(shù)據(jù)庫中的數(shù)據(jù)造成影響. 也就說查數(shù)據(jù)不會修改原有數(shù)據(jù)空中的數(shù)據(jù), 而增刪改會修改原有數(shù)據(jù)庫中的數(shù)據(jù).
當對原有數(shù)據(jù)庫中數(shù)據(jù)有修改時需要使用
# commit()提交數(shù)據(jù)到數(shù)據(jù)庫# 這里可以理解為 數(shù)據(jù)庫詢問是否確定修改數(shù)據(jù) 然后commit()就是確定修改的意思conn.commit()
數(shù)據(jù)回滾rollback()
當我們在使用pymysql對數(shù)據(jù)進行響應的操作時, 會有可能會有一些錯誤操作, 這是如果想要數(shù)據(jù)返回到最原始的狀態(tài)可以使用數(shù)據(jù)回滾操作
注意:
數(shù)據(jù)回滾是需要在 commit() 之前才有效的, 也就是說數(shù)據(jù)還沒有確定修改這時候使用數(shù)據(jù)回滾才是有效的
# 回滾數(shù)據(jù)到什么都沒做的原始狀態(tài) 即撤銷剛剛所有的修改操作conn.rollback()
2. pymysql的增刪改查操作
在掌握了數(shù)據(jù)提交commit后, 實際上pymysql的數(shù)據(jù)的增刪改和數(shù)據(jù)的查就沒有什么區(qū)別了, 這里僅僅是對sql語句進行修改即可, 其他的操作步驟和原先的查是一樣的
總結
數(shù)據(jù)提交:
commit()
數(shù)據(jù)回滾
rollback()