mysql和pymysql使用教程

MySQL

關係型數據庫入門

1. 數據持久化

數據庫是數據持久化的一種工具, 如果想要做到數據持久化必須將數據通過文件保存到硬盤中。

當我們做數據持久化操作時不僅僅是希望能夠把數據長久的保存起來,更爲重要的是我們希望很方便的管理數據,在需要數據的時候能夠很方便的把需要的數據取出來。數據庫比起一般的文件,在數據管理有明顯的優勢,這也是爲什麼程序中數據的持久化絕大部分都採用的是數據庫

2. 數據庫發展史

目前數據庫主要分爲兩種:關係型數據庫和NoSQL數據庫(在這兩個之前還有網狀數據庫、層次數據庫。但是現在都已經不用了)。這兒我們主要介紹第一種數據庫,也是就關係型數據庫。

1970年,IBM的研究員E.F.Codd在Communication of the ACM上發表了名爲A Relational Model of Data for Large Shared Data Banks的論文,提出了關係模型的概念,奠定了關係模型的理論基礎。後來Codd又陸續發表多篇文章,論述了範式理論和衡量關係系統的12條標準,用數學理論奠定了關係數據庫的基礎。

3. 關係型數據庫的特點

  • 理論基礎:集合論和關係代數
  • 具體表象:用二維表組織數據

列 — 字段

行 — 記錄

  • 編程語言:結構化查詢語言(SQL)

4.數據庫產品排名

  • Oracle - 目前世界上使用最爲廣泛的數據庫管理系統,作爲一個通用的數據庫系統,它具有完整的數據管理功能;作爲一個關係數據庫,它是一個完備關係的產品;作爲分佈式數據庫,它實現了分佈式處理的功能。在Oracle最新的12c版本中,還引入了多承租方架構,使用該架構可輕鬆部署和管理數據庫雲。

  • MySQL - MySQL是開放源代碼的,任何人都可以在GPL(General Public License)的許可下下載並根據個性化的需要對其進行修改。MySQL因爲其速度、可靠性和適應性而備受關注。

  • SQL Server - 由Microsoft開發和推廣的關係型數據庫產品,最初適用於中小企業的數據管理,但是近年來它的應用範圍有所擴展,部分大企業甚至是跨國公司也開始基於它來構建自己的數據管理系統。

  • PostgreSQL - 在BSD許可證下發行的開放源代碼的關係數據庫產品。

  • MongoDB - MongoDB是2009年問世的一個面向文檔的數據庫管理系統,由C++語言編寫,旨在爲Web應用提供可擴展的高性能數據存儲解決方案。雖然在劃分類別的時候後,MongoDB被認爲是NoSQL的產品,但是它更像一個介於關係數據庫和非關係數據庫之間的產品,在非關係數據庫中它功能最豐富,最像關係數據庫。

  • DB2 - IBM公司開發的、主要運行於Unix(包括IBM自家的AIX)、Linux、以及Windows服務器版等系統的關係數據庫產品。DB2歷史悠久且被認爲是最早使用SQL的數據庫產品,它擁有較爲強大的商業智能功能。

  • Redis - Redis是一種基於鍵值對的NoSQL數據庫,它提供了對多種數據類型(字符串、哈希、列表、集合、有序集合、位圖等)的支持,能夠滿足很多應用場景的需求。Redis將數據放在內存中,因此讀寫性能是非常驚人的。

  • ElasticSearch - ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並作爲Apache許可條款下的開放源碼發佈,是一種流行的企業級搜索引擎。

SQL(結構化查詢語言)詳解

我們通常可以將SQL分爲三類:DDL(數據定義語言)、DML(數據操作語言)和DCL(數據控制語言)

  • DDL - 主要負責創建表、刪除表和修改表,涉及的指令有: create、drop、alter
  • DML - 主要負責數據的增(insert)、刪(delete)、改(update)、查(select)
  • DCL - 通常用於授予權限(grant)和召回權限(revoke)

注意: SQL語句中關鍵字不區分大小寫,並且一條語句結束必須寫分號

1. DDL(數據定義語言)

1.1 創建數據庫
1. create database 數據庫名;     -- 創建指定數據庫;如果該數據庫已經存在會報錯
2. create database if not exists 數據庫名;      -- 當指定數據庫不存在的時候創建數據庫;如果存在就不創建,也不會報錯
3. create database if not EXISTS 數據庫名 default charset utf8;  -- 創建數據庫的時候設置字符集編碼方式爲utf8,讓數據庫支持中文數據的存儲

-- 注意: 可以在通過 character-set-server=utf8 來設置MySQL服務啓動時默認使用的字符集

-- 創建school數據庫示例:
CREATE DATABASE IF NOT EXISTS school DEFAULT charset utf8;
1.2 刪除數據庫
1. drop database 數據庫名;     -- 刪除指定數據庫;如果該數據庫不存在會報錯
2. DROP DATABASE if EXISTS 數據庫名; 	-- 當指定數據庫存在的時候刪除數據庫;如果數據庫不存在不會報錯

-- 刪除school數據庫示例:
DROP DATABASE IF EXISTS school;
1.3 使用/切換數據庫
1. use 數據庫名;         -- 切換到指定數據庫


-- 使用school數據庫示例:
USE school;
1.4 創建表
1. create table if not exists 表名(字段名1 類型1 約束1 comment 描述1, 字段2 類型2 約束2 comment 描述2,...);
-- 1)表名   - 程序員自己命名,但是一般以t或者tb作爲前綴表示表名; 而且要見名知義
-- 2)字段名  - 程序員自己命名,要求見名知義
-- 3)類型   - 類型必須是當前數據庫支持的類型名,mysql中常見的類型有: int(整數), float(小數),char/varchar/text(字符串),bit(布爾),date(日期)
-- 4)約束   - 創建約束:not null - 不爲空, default  - 設置默認值, unique - 值唯一, primary key - 主鍵約束 
-- 4.1)主鍵約束  - 主鍵的值可以確定列表中唯一一條記錄(通過一個主鍵值可以找到表中的唯一一條記錄),所以一般每張表都需要設置一個字段爲主鍵,主鍵的值也必須是唯一的;一般需要可以通過auto_increment約束讓整型主鍵自動增加
-- 5)comment    -  添加字段說明

-- 創建學生表示例1:
CREATE TABLE IF NOT EXISTS t_student
(
stuid  int not null PRIMARY KEY auto_increment COMMENT '學號',
stu_name  varchar(20) not null COMMENT '姓名',
stuage  int COMMENT '年齡', 
stugender   bit default 1 COMMENT '性別',
stubirth   date COMMENT '生日'
);

-- 創建教師表示例2:
CREATE TABLE IF NOT EXISTS t_teacher
(
teaid int not null auto_increment COMMENT '編號',
teaname  varchar(20) not null COMMENT '姓名',
teaage int comment '年齡',
teatitle varchar(20) DEFAULT '助教' COMMENT '職稱',
PRIMARY KEY (teaid)    -- 主鍵設置可以在後面單獨設置
)
1.5 刪除表
1. DROP TABLE if EXISTS 表名;   -- 刪除指定表

-- 刪除教師表示例:
DROP TABLE if EXISTS t_teacher;
1.6 修改表
1.6.1 添加字段/列
1. alter TABLE 表名 add COLUMN 字段名 字段類型 約束 comment 描述;   -- 在指定表中添加指定字段

-- 給學生表添加地址字段示例:
alter TABLE t_student add COLUMN stuaddr varchar(200) DEFAULT '' COMMENT '家庭住址';
1.6.2 刪除字段/列
1. alter TABLE 表名 drop COLUMN 字段名;    -- 刪除指定表中的指定字段

-- 示例:
ALTER TABLE t_student DROP COLUMN stuage;

2. DML(數據操作語言)

2.1 增(添加記錄)
1. insert into 表名 values(值1,值2,值3,...)  -- 按照表中字段的順序依次給每個字段賦值

-- 示例:
insert into t_student values(2,'李四',0,'2017-12-30','成都');


2. insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);   -- 按指定順序給指定字段賦值

-- 示例:
insert into t_student(stuname, stugender, stubirth,stuaddr) values('夏明',1,'1992-3-12','大連');

-- 一次插入多條記錄  
insert into t_student(stuname, stubirth, stuaddr) values
('小花','1989-10-2','南京'),
('Tom',date(now()),'西安'),
('大黃','2000-1-20','瀋陽');


-- 值的問題: sql中是數字對應的值直接寫,字符串需要使用引號引起來,bit類型的值只有0或者1, 時間可以用內容是滿足時間格式字符串也可以是通過時間函數獲取的值
-- 時間函數: now() - 當前時間  date(now()) - 當前日期   year(now()) - 當前年   month(now()) - 當前月 ....
2.2 刪(刪除記錄)
1. delete from 表名;  -- 刪除指定表中所有記錄

-- 示例:
delete from t_student;



2. delete from 表名 where 條件語句;    -- 刪除滿足條件的記錄

-- 示例:
delete from t_student where stuid=9;     -- 刪除stuid等於9的記錄
delete from t_student where stuage=18 and stugender=0;    -- 刪除stuage等於18並且stugender等於0的記錄
delete from t_student where stuage in (16,17);    -- 刪除stuage是16和stuage是17的記錄
delete from t_student where stuname like 'stu%';   -- 刪除stuname的值是以stu開頭的記錄
delete from t_student where stuname like '%1';   -- 刪除stuname的值是以1結尾的記錄
delete from t_student where not age=18;      -- 刪除stuage不是18的記錄
delete from t_student where birth is NULL;   -- 刪除stubirth是NULL的記錄

-- 條件語句的寫法
-- 1)比較運算符: =(等於), <>(不等於),>(大於), <(小於),>=(大於等於), <=(小於等於)
-- 2)邏輯運算符: and(並且), or(或者), not(非)
-- 3)是否爲空: is null(爲空), is not null(不爲空)
-- 4)範圍: between x and y(在x到y之間), not between x and y(不在x到y之間)
-- 5)字符串匹配: like 字符串(像, like後面的字符串可以使用%表示任意個任意字符, _表示任意一個字符)
-- 6)指定集合元素: in (值1,值2,...)(結果是集合中的元素)
2.3 改(修改數據/記錄)
1. update 表名 set 字段1=新值1, 字段2=新值2,...;  	-- 將指定表中所有行的指定列/字段的值賦值爲新值

-- 示例:
update t_student set stubirth='1992-3-12';     -- 將所有記錄中的stubirth字段都設置爲1992-3-12




2. update 表名 set 字段1=新值1, 字段2=新值2,... where 條件語句;  -- 將表中滿足條件的行中指定字段的值賦值爲新值 

-- 示例:
update t_student set stuage=20 where not stuname like 'stu%';  -- 將所有stuname不是stu開頭的記錄的stuage字段設置爲20
2.4 查(獲取數據)
2.4.1 直接查詢
1. select * from 表名;    -- 獲取指定表中所有行和所有的列(所有數據)

-- 示例:
SELECT * FROM t_student;


-- 映射
2. select 字段名1,字段名2,... from 表名;   -- 獲取指定表中所有行指定的列

-- 示例:
SELECT stuname,stuid FROM t_student; 



3. select * from 表名 where 條件;    -- 獲取指定表中所有滿足條件的行所有列的數據

-- 示例:
SELECT * FROM t_student WHERE stuid>115; 
SELECT stuname,stuage FROM t_student WHERE stuid>115;
2.4.2 列重命名
1. select 字段1 as 新字段1, 字段2 as 新字段2,... from 表名; 
-- 注意: 這兒的as可以省略

-- 示例:
select stuname as '姓名', stuage as '年齡' from t_student;
2.4.3 對查詢結果重新賦值(一般針對布爾數據)
1. select if(字段名,值1,值2) from 表名;    -- 查詢指定字段,並且判斷字段對應的值是0還是1,如果是1結果爲值1,否則爲值2
-- 注意: 這兒的if的用法是MySQL專有的
-- MySQL寫法: if(字段, 新值1, 新值2)
-- 通用寫法: case 字段 when 值 then 新值1 else 新值2 end

-- 示例:
select stuname, if(stugender, '男', '女') from t_student;   -- 查詢的時候如果stugender的結果不再是0或者1而是男或者女
select stuname, case stugender when 1 then '男' else '女' end from t_student; -- 查詢的時候如果stugender的結果不再是0或者1而是男或者女
2.4.4 對列進行合併
1. select concat(字段1,字段2,...) from 表名;  

-- 示例:
select concat(stuname, stuage) from t_student;    -- 將多個字段的數據合併成一個數據返回
select concat(stuname, stuage) as 'nameage' from t_student;    -- 將多個字段的數據合併成一個數據返回並且爲其數據重命名
select concat(stuname, ':', stuid) as 'name_id' from t_student;  

-- 注意: 數字和字符串數據可以合併,bit類型的數據不可以合併
2.4.5 模糊查詢 - 查詢的時候時候通過like條件來指定查詢對象
-- 示例:
select * from t_student where stu_name like 'stu%' and gender=0;
2.4.6 排序(先按之前的任何語法進行查詢在排序)
1. select * from 表名 order by 字段;      -- 對查詢結果按照指定字段的值進行升序排序 
2. select * from 表名 order by 字段 asc;      -- 對查詢結果按照指定字段的值進行升序排序 
3. select * from 表名 order by 字段 desc;      -- 對查詢結果按照指定字段的值進行降序排序

-- 示例:
select * from t_student order by stuage;
select * from t_student order by stuage asc;
select * from t_student order by stuage desc;
select * from t_student order by age asc, gender asc;  -- 對查詢結果先按年齡進行排序;年齡相同的再按性別進行排序
2.4.7 去重
1. select distinct 字段 from 表名;   -- 獲取指定字段的值並且去重

-- 示例:
select distinct stuage from t_student;
2.4.8 限制和分頁
1. select * from 表名 limit 數量;  -- 值獲取指定數量的查詢結果

-- 示例:
select * from t_student limit 3;    -- 獲取查詢結果的前3條



2. select * from 表名 limit M offset N;   -- 跳過前N條數據獲取M條數據

-- 示例:
select * from t_student limit 3 offset 4;   -- 跳過前4條數據獲取3條數據



3. select * from 表名 limit M,N;   -- 跳過前M條數據獲取N條數據

-- 示例:
select * from t_student limit 3,4;    --  跳過前3條數據獲取4條數據

3. 外鍵與E.R圖

3.1 約束管理
3.1.1 添加約束

添加普通約束的方式有兩種,一種是創建表的時候直接給字段添加相應的約束,另一種是通過修改表的方式添加約束

1. 創建表的時候添加約束
建表的時候可以在字段類型後面加一個或者多個約束

2.通過添加約束索引的方式添加約束
alter table 表名 add constraint 索引名 約束(字段);
-- 說明: 索引名 - 自己隨便命名;  約束 - 當前想要添加的約束(但是隻支持唯一約束、主鍵約束和外鍵約束)

-- 示例:
alter table t_teacher add constraint uni_tel UNIQUE(teatel);                      
3.1.2 刪除約束
alter table 表名 drop index 約束索引;

-- 示例:
alter table t_teacher drop index uni_tel;
3.2 外鍵約束
1.什麼是外鍵:表中的某個字段的值是根據其他表中主鍵的值來確定的。那麼這個字段就是外鍵 
1.1 不同類型的外鍵添加方法:
	多對一的外鍵的添加: 將外鍵添加到多的一方對應的表中 
	一對一的外鍵的添加: 將外鍵隨便添加到哪一方,同時添加值唯一約束
	多對多的外鍵的添加: 關係型數據庫中,兩張表沒法實現多多的關係,需要一箇中間表。(中間表有兩個外鍵分別參照		               多多的兩個表的主鍵)
1.2 添加外鍵約束語法:
	alter table 表名1 add constraint 外鍵約束索引名 foreign key (字段1) references 表名2 (字段2);
	-- 將表1中的字段1設置爲外鍵,並且讓這個外鍵的值參照表2中的字段2
	
1.3 刪除外鍵約束
	alter table 表名 drop foreign key 外鍵索引名;
3.3 高級查詢
3.3.1 聚合:max()/min()/sum()/avg()/count()
SELECT score FROM tb_score;
SELECT max(score) as max_score FROM tb_score;   -- 獲取tb_score表中字段score的最大值
SELECT min(score) as min_score FROM tb_score;   -- 獲取tb_score表中字段score的最小值
SELECT sum(score) as sum_score FROM tb_score;   -- 獲取tb_score表中字段score的和
SELECT AVG(score) as avg_score FROM tb_score;   -- 獲取tb_score表中字段score的平均值
SELECT COUNT(score) as count_score FROM tb_score WHERE score>80;  -- 統計tb_score表中字段score大於80的個數
3.3.2 分組
SELECT 字段操作  FROM 表名 WHERE 條件 GROUP BY(字段2);
-- 將指定表中滿足條件的記錄按照字段2的進行分組(值是一樣的在一個組裏面), 然後再講每個分組作爲整體按照指定字段進行指定聚合操作
-- 注意:a.字段操作的位置除了分組字段不用聚合,其他字段都必須聚合   b.分組的時候where要放到分組前對需要分組的數據進行篩選

select stuid, avg(score) from tb_score group by(stuid);

-- having: 分組的時候,在分組後用having代替where來對分組後的數據進行篩選
select stuid, max(score) from tb_score group by(stuid) having max(score)>90;
select stuid, avg(score) from tb_score group by(stuid) having avg(score)>80;
3.3.3 子查詢
-- 將一個查詢的結果作爲另外一個查詢的條件或者查詢對象
-- 第一種子查詢: 將查詢結果作爲另外一個查詢的條件

-- 獲取成績大於90分的學生姓名
select stuname from tb_student where stuid in 
(select stuid from tb_score where score>90);

-- 第二週子查詢:將一個查詢的結果作爲查詢對象提供給另外一個查詢。但是第一個查詢結果需要重命名 
select score from (SELECT stuid,score from tb_score where score>80) as t2;
3.3.4 連接查詢 - 同時查詢多張表
1. 直接連接
select * from 表名1,表名2,表名3 連接條件 查詢條件;
-- 注意: 如果既有連接條件又有查詢條件,查詢條件必須放在連接條件的後面

-- 查詢所有學生的名字和學院名字
select stuname, collname from tb_student, tb_college where tb_student.colid=tb_college.collid;

2.內連接
SELECT * FROM 表1 inner join 表2 on 表2的連接條件 inner join 表3 on 表3的連接條件 ...;
-- 注意: 中間表寫在最前面(存在關聯其他表外鍵的表)

3.外連接
-- 外連接分爲左外連接、右外連接和全連接, 但是在MySQL中支持左外連接和右外連接 
-- 左外連接:將左表中對應字段的所有數據取出,然後再對應的右表中字段的值,如果右表對應的值不存在結果就爲null 
-- 右外連接:將右表中對應字段的所有數據取出,然後再對應的左表中字段的值,如果左表對應的值不存在結果就爲null 
select * from 表1 left join 表2 on 連接條件;
select * from 表1 right join 表2 on 連接條件;

-- 獲取所有學生的成績
select stuname, score from tb_student left join tb_score on tb_student.stuid=tb_score.sid;

4. DCL(數據控制語言)

DCL主要提供grant和revoke來授權和召回權限

4.1 用戶管理
1. 添加用戶
create user 用戶名@登錄地址;    -- 創建數據用戶,登錄不需要密碼
-- 登錄地址 - 限制用戶能夠登錄MySQL的主機地址,可以賦值爲: ip地址(指定地址)、localhost(數據庫本機)、%(任何位置)
create user 用戶名@登錄地址 identified by 密碼; -- 創建數據用戶,登錄需要輸入指定密碼密碼

-- 示例:
create user zhangsan@localhost;
create user lisi@localhost identified by '123456';

2. 刪除用戶
drop user 用戶名;
drop user zhangsan;
4.2 權限管理
1. 授權
grant 權限類型 on 數據庫.對象 from 用戶名;
-- 常見權限類型: delete(刪除權限), select(查詢權限),update(更新權限),insert(插入權限), all PRIVILEGES(所有權限)

-- 示例:
GRANT SELECT on school.tb_student TO 'zhangshan';
GRANT UPDATE on school.tb_student TO 'zhangshan';
GRANT all PRIVILEGES ON school.* TO 'zhangshan';   -- 添加所有權限


2.召回授權
revoke 權限類型 on 數據庫.對象 from 用戶名;

-- 示例:
REVOKE DELETE on school.* FROM 'zhangshan';
REVOKE all PRIVILEGES on school.* FROM 'zhangshan';
REVOKE all PRIVILEGES on school.* FROM 'zhangshan';
REVOKE SELECT on school.tb_student FROM 'zhangshan';
REVOKE UPDATE on school.tb_student FROM 'zhangshan';
4.3 事務

完成一個任務需要執行多條sql,但是要求這多個操作中只要有一個操作失敗,這個任務就失敗,數據全部還原;所有的操作都成功,整個任務才成功的時候就使用事務

-- 開啓事務環境
begin;
需要執行的多個操作對應的sql語句

-- 提交事務(只有begin到commit之間的所有的sql都執行成功,纔會執行commit; 否則執行rollback)
COMMIT;
-- 事務回滾(放棄beigin到commit之間執行成功的所有sql語句的結果)
ROLLBACK;

5. 視圖

視圖是關係型數據庫中將一組查詢指令構成的結果集組合成可查詢的數據表的對象。簡單的說,視圖就是虛擬的表,但與數據表不同的是,數據表是一種實體結構,而視圖是一種虛擬結構,你也可以將視圖理解爲保存在數據庫中被賦予名字的SQL語句。

使用視圖可以獲得以下好處:

  1. 可以將實體數據表隱藏起來,讓外部程序無法得知實際的數據結構,讓訪問者可以使用表的組成部分而不是整個表,降低數據庫被攻擊的風險。
  2. 在大多數的情況下視圖是隻讀的(更新視圖的操作通常都有諸多的限制),外部程序無法直接透過視圖修改數據。
  3. 重用SQL語句,將高度複雜的查詢包裝在視圖表中,直接訪問該視圖即可取出需要的數據;也可以將視圖視爲數據表進行連接查詢。
  4. 視圖可以返回與實體數據表不同格式的數據,
1. 創建視圖
create view 視圖名 as sql查詢語句;

-- 示例:
create view vw_student
as SELECT * FROM tb_student;



2. 使用視圖  - 視圖在用的時候可以直接當成表來使用

-- 示例:
select * FROM vw_student;

select stuname, collname from vw_student, tb_college where vw_student.colid=tb_college.collid;

6. 索引

索引相當於書本的目錄,爲表創建索引可以加速查詢(用空間換時間)。

索引雖然很好,但是不能濫用:

  • 索引會佔用額外的空間
  • 索引會讓增刪改變得更慢

如果哪個列經常被用於查詢的篩選條件那麼就應該在這個列上建立索引。

主鍵上有默認索引(唯一索引)

1. 創建索引
-- 如果使用模糊查詢,查詢條件不以%開頭,那麼索引有效
-- 如果使用模糊查詢,查詢條件以%開頭,那麼索引無效(儘量避免)
create index 索引名 on 表名 (字段);    -- 給指定表的指定字段添加索引
create unique index 索引名 on 表名 (字段);  -- 給指定表的指定字段添加唯一索引

-- 示例:
create index idx_stuname on tb_student(stuname);
create unique index idx_stuname on tb_student(stuname);


2. 刪除索引
alter table 表名 drop index 索引名; 		-- 刪除指定索引,唯一索引也是這樣刪

-- 示例: 
alter table tb_student drop index idx_stuname;


注意: 可以通過explain來查看sql的執行計劃

6.Python數據庫編程 - pymysql

實際開發中,我們的sql語句是在程序中來控制數據庫的。python中可以使用一些相應的第三庫來連接mysql數據庫,我們這兒介紹的是其中的pymysql。

如果想要使用pymysql需要先安裝: pip install pymysql

import pymysql

# 1. 建立連接
"""
pymysql.connect(host,user,password,database,port,charset,autocommit)   - 和數據庫建立連接並且返回一個連接對象

說明: host - 數據庫所在的主機地址
	  user - 數據庫用戶名
	  password - 用戶密碼(如果賬號不需要密碼這個參數可以不用傳參)
	  database - 默認使用的數據庫(連接的時候也可以不指定,後邊通過use來切換數據庫)
	  port - 數據庫服務端口,3306
	  charset - 數據庫文件的編碼方式
	  autocommit - 自動提交
	  cursors - 遊標類型: pymysql.cursors.DictCursor
"""

# 2. 獲取遊標對象  - 遊標使用來提供數據庫操作上下文的,在數據庫操作上下文件需要通過遊標對象去執行sql語句
"""
with 連接對象.cursor(遊標類型) as 遊標對象:
	操作數據庫的代碼段
	
	
說明: 遊標類型 - 默認是None,表示查詢的時候結果是以元組的形式返回;
			   pymysql.cursors.DictCursor, 表示查詢的時候結果是以字典的形式返回
"""

# 3.執行sql語句
"""
遊標對象.execute(sql語句)    - 執行指定的sql語句,並且返回執行結果(sql語句是字符串)

注意: 如果sql語句是查詢語句,查詢的結果並不在返回值中,而是保持在遊標對象中的,
	  需要通過: 遊標對象.fetchall()來獲取sql語句的查詢結果
	  
查詢結果 = 遊標對象.fetchall()   - 查詢結果是容器型數據類型,而且這個容器中的元素取一個就少一個
"""

# 4. 關閉連接:連接對象.close()

# 5. 提交事務:連接對象.commit()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章