
一.簡介MySQL 是一個開源、免費且成熟穩定的關系型數據庫管理系統RDBMS被廣泛應用于各類 Web 應用和爬蟲數據存儲中。 所謂“關系型”指的是它將數據以二維表格的形式組織存儲類似 Excel 工作表表與表之間可以通過共有的字段如用戶ID建立關聯配合結構化查詢語言SQL能夠對數據進行非常嚴謹、靈活的增刪改查操作并嚴格保證數據的一致性和完整性支持事務 ACID。在爬蟲開發中MySQL 常作為最終的數據歸宿地通過編寫 Pipeline 組件將 Scrapy 抓取的清洗后數據持久化存儲到本地或云端的 MySQL 服務中便于后續的查詢與分析。二.可視化結構由于MySQL本身是在cmd命令行中操作的因此需要借助可視化工具獲得更好更直觀的使用體驗常用第三方可視化工具有Navicat、DBeaver等等這里使用DBeaver進行演示。右側端口號為3306的localhost就是我們電腦上的MySQL服務程序MySQL數據庫默認端口號是3306下面數據庫一欄中放著默認數據庫和我們創建的所有數據庫在使用中我們應避免使用默認數據庫。三.SQL語言由于數據庫管理系統功能非常多不僅存儲數據還包含數據的管理、表的管理、庫的管理、賬戶管理、權限管理等等所以操作數據庫的SQL語言也基于功能被劃分為四大類。SQL語句大小寫不敏感,命令結束必須帶分號1.數據定義DDLData Definition Language庫與表的操作a.庫的相關操作輸入命令show databases;查看數據庫。輸入命令use 數據庫名稱;使用和切換數據庫后續想要更換數據庫進行操作也輸入此命令。輸入命令select database();查看當前正在使用的數據庫鼠標選中單條命令可單獨執行此命令。輸入命令create database [if not exists] 數據庫名稱 [charset 編碼名稱];創建數據庫中括號表示可寫可不寫寫的話不用寫括號直接寫命令如果加第一個括號中的內容表示如果存在同名數據庫就不進行任操作反之創建數據庫。第二個括號中內容作用是設置編碼方式MySQL默認utf-8編碼這里不用加橫杠最好顯式設置一下。注左側不顯示數據庫就右擊刷新一下。輸入命令drop database 數據庫名稱;刪除指定數據庫。b.表的相關操作在我們創建表時要為列指定一個列類型列類型有以下幾種可按需選擇輸入命令create table [if not exists] 表名稱( 列名稱 列類型, 列名稱 列類型, ......);創建表注意圖中格式且最后一行沒逗號如果加括號中的內容表示如果存在同名表就不進行任操作反之創建表。輸入命令rename table 舊表名 to 新表名;來修改表名。輸入命令alter table 表名 add 列名 列類型;單獨添加一列不能添加數據。輸入命令alter table 表名 change 舊列名 新列名 新列類型;更改列名和列類型如需只更改類型寫相同列名即可。輸入命令alter table 表名 drop 列名;單獨刪除一列。輸入命令show tables;查看表注在此之前應先用use選擇使用哪個數據庫。輸入命令desc 表名;查看表結構每一列的類型等信息庫里有多張表難免會忘記某張表的設置信息這時就需要靠此命令查詢。輸入命令drop table 表名;刪除指定數據表。2.數據操縱DMLData Manipulation Language增刪改數據a.數據插入字符串最好用單引號輸入命令insert into 表名(列名) values(值1)[, (值2), (值3)......];進行單列插入插入一條或多條數據。輸入命令insert into 表名(列1, 列2, 列3, ......) values(列1對應值, 列2對應值, 列3對應值, ......), [(列1對應值, 列2對應值, 列3對應值, ......), ......];進行多列插入插入一條或多條數據。注多列插入可以省略列名但值的位置和類型必須一一對應b.數據刪除條件判斷的常見操作符輸入命令delete from 表名稱 [where 條件判斷];從表中刪除數據。如果不加中括號中的條件判斷句就是清空整張表中的數據但不刪除表格。c.數據更新輸入命令update 表名 set 列 值 [where 條件判斷];進行數據更新操作。不寫條件判斷就是修改整張表中指定列的所有值。3.數據查詢DQLData Query Language查詢和計算數據a.基礎查詢輸入命令select 字段列表 | * from 表;進行數據查詢“ | ”表示前后可選?!?* ”是通配符代表所有。b.分組聚合簡介如果要統計一個班級中男生和女生的人數就需要先按性別分組再i統計每組人數這就是分組聚合。常用聚合函數;輸入命令select 字段 | 聚合函數 from 表 [where 條件] group by 列;進行分組聚合操作group by后寫了誰字段中才能出現誰但聚合函數無限制可以有一個或多個。由于這個結果并不夠直觀我們可以加上gender字段增加視覺效果如果字段和聚合函數同時存在中間要有逗號隔開否則報錯聚合函數可以有一個或多個中間同樣要逗號隔開這里count(gender)表示滿足條件且有性別的數據有幾條。c.排序分頁輸入命令select 列 | 聚合函數 | * from 表 where ... group by ... order by ... [asc | desc];指定某個列進行排序其中asc即ascending代表升序desc即descending代表降序。desc降序排列。輸入命令select 列 | 聚合函數 | * from 表 where ... group by ... order by ... [asc | desc] limit n[ , m];進行限制排序和分頁如果limit后只有n則返回符合前置條件且排名前n條的數據。limit后n和m都有則顯示符合前置條件的數據從第n1條開始到第m條。四.Python操作MySQL的基本方法1.連接MySQL要用Python操作MySQL儲存我們爬取的數據必須要用到一個名為pymysql的第三方庫按winR輸入cmd打開終端輸入命令pip install pymysql進行安裝然后進行后續操作。安裝完成后我們就可以用python與MySQL數據庫進行基礎的連接注意當前項目文件名不能出現pymysql否則會報錯2.執行SQL語句在Python代碼中寫SQL語句時可以末尾可以不加分號但在可視化界面或MySQL環境中必須加分號a.執行非查詢性質的SQL語句在Python中我們需要游標對象來執行SQL語句因此我們要先用連接對象來實例化游標對象并用連接對象選擇目標數據庫然后就可以在游標對象.execute( )中寫SQL語句了且這里SQL語句一定要加引號。b.執行查詢性質的SQL語句由于查詢性質的SQL語句我們需要接收查詢的結果所以寫法略有不同。需要先用游標對象獲取查詢結果再用一個變量接收這個結果該結果是一個雙層嵌套的元組。c.執行數據插入通過Python往MySQL數據庫插入數據時需通過commit確認插入否則運行后數據庫內數據也不會發生改變如不想手動進行插入可在連接對象中設置自動插入。輸入連接對象.commit()確認數據插入。在連接對象conn中設置autocommit True實現自動提交后面所有的插入語句都無需手動確認。