一劲蜻、mysql(非常重要)
生活中和數(shù)據(jù)相關(guān)的都存在數(shù)據(jù)庫中涮帘。
數(shù)據(jù)庫都有哪些類型呢?
關(guān)系型 : oracle(收費) mysql(免費)
非關(guān)系型:redis MongoDB
SQL: 結(jié)構(gòu)化查詢語言掘剪,就是對數(shù)據(jù)庫 創(chuàng)建庫垦梆、創(chuàng)建表、增刪改查 等操作
SQL分類:DDL(數(shù)據(jù)定義) DML(數(shù)據(jù)操作) DQL(數(shù)據(jù)查詢) DCL(數(shù)據(jù)控制) DTL(數(shù)據(jù)事物)
數(shù)據(jù)庫如何存儲數(shù)據(jù)厚满?
數(shù)據(jù)庫服務(wù)器:mysql oracle
數(shù)據(jù)庫:boke market
數(shù)據(jù)表:每一個庫里面又有好多的表
數(shù)據(jù)字段:一個表會有好多字段(表頭)府瞄,姓名、年齡痰滋、性別摘能、身高等
數(shù)據(jù)行:一條真實的數(shù)據(jù)
安裝數(shù)據(jù)庫
windows安裝:配置文件 my.ini
linux安裝: 配置文件 my.conf
基本數(shù)據(jù)類型
數(shù)據(jù)字段,不同的字段要求有不同的數(shù)據(jù)類型
整型:
無符號-有符號敲街,如何表示負(fù)數(shù)团搞,最高位代表符號位,如果是1多艇,代表負(fù)數(shù)逻恐,如果是0,代表正數(shù)
整數(shù)的原碼峻黍、反碼复隆、補碼都一樣
原碼、反碼姆涩、補碼
1000 0001 -1的原碼
1111 1110 -1的反碼 反碼=原碼符號位不變挽拂,其它按位取反
1111 1111 -1的補碼 補碼=原碼符號位不變,其他位取反+1=反碼+1
八位:表示無符號 0-255 表示有符號 -128-127
int 4個字節(jié)
tinyint 1個字節(jié)
浮點:
decimal(m,d) 其本質(zhì)存字符串
字符串:
char : char(32) 最多255 定長
中文用戶名:周杰倫
utf8編碼:一個漢字需要3個字節(jié)
不管多還是少骨饿,只給你32個
varchar :varchar(32) 變長
愛新覺羅穆罕默德 24個字節(jié)
如果字節(jié)小于32亏栈,那么就為當(dāng)時字節(jié)台腥,如果字節(jié)大于32,最多只能是32
text :用來存儲文本內(nèi)容
時間類型
datetime : 日期時間
timestamp 绒北;時間戳
int : 時間戳
復(fù)合類型:
set :多選 比如愛好 籃球-足球-羽毛球
enum : 單選 性別 男-女-人妖
autoincrement :自動增長黎侈,自增
default : 默認(rèn)值,當(dāng)沒有給值的時候闷游,它的值為多少峻汉,默認(rèn)為NULL
not null : 限制一個字段的值不能為NULL
如果一個字段不能為空,又沒有默認(rèn)值脐往,那么這個字段必須插入值
DDL:
SQL語句都要以分號結(jié)尾休吠,如果發(fā)現(xiàn)指令寫錯了,添加 \c 清掉所有指令
day12-mysql2
1钙勃、DDL(數(shù)據(jù)定義)
連接數(shù)據(jù)庫
格式:Mysql -h -u 用戶名 -p
-h:表示數(shù)據(jù)庫連接的地址蛛碌,如果是連接本機可不填
-u:表示要登錄的用戶
-p:表示使用密碼登錄
注: -p后接密碼不要直接寫在后面避免有人查找到你的密碼
查看數(shù)據(jù)庫
show databases;
創(chuàng)建數(shù)據(jù)庫
create database 數(shù)據(jù)庫名;
刪除數(shù)據(jù)庫
drop database 庫名;
選中數(shù)據(jù)庫
use 庫名;
查看表
show tables;
創(chuàng)建表
create table 表名(字段名1 字段類型,....字段名n 字段類型n);
create table user(username varchar(30), password char(32));
查看表結(jié)構(gòu)(表字段)
desc 表名;
desc user;
查看表創(chuàng)建語句
show create table user;
1.刪除表
drop table 表名;
drop table user;
2.清空表
truncate table 表名稱;
truncate table dbo.Sys_Test
3辖源、delete from 表名稱 where 列名稱 = 值
delete from dbo.Sys_Test where test='test'
創(chuàng)建表指定字符集和引擎
查看創(chuàng)建庫及表語句
show create database 庫名;
show create table 表名;
創(chuàng)建表時指定(每次指定)
存儲引擎 engine=InnoDB
創(chuàng)建表時指定字符集default charset=utf8
設(shè)置配置文件(統(tǒng)一設(shè)置)
存儲引擎:default-storage-engine=InnoDB
字符集:character_set_server=utf8
修改字段類型(了解)
alter table 表名 modify 字段名 varchar(20);
alter table user modify username varchar(20);
添加字段
alter table 表名 add 字段名 類型;
alter table user add email varchar(30)
添加字段到指定位置的后面
alter table 表名 add 字段名 字段類型 after 字段名;
alter table user add email varchar(30) after username;
添加id在字段的最前面(int默認(rèn)11)
Alter table user add id int first;
刪除字段
alter table 表名 drop 字段名;
alter table user drop age;
表字段改名
alter table 表名 change 字段原名 字段新名 字段類型;
alter table user change email em varchar(60);
修改表名
alter table 舊表名 rename 新的表名;
alter table user rename new_user;
2蔚携、DML(數(shù)據(jù)操作)
增刪改查 ---create update read delta --- 簡稱:curd操作
(1)首先通過 進入數(shù)據(jù)庫系統(tǒng)--->mysql -uroot -p
(2)創(chuàng)建數(shù)據(jù)庫dudu,--->create database 數(shù)據(jù)庫名;
(3)進入數(shù)據(jù)庫dudu--->use dudu克饶,
(4)然后才是創(chuàng)建表的過程
【注意】所有的符號都是英文酝蜒。
創(chuàng)建表開始學(xué)習(xí)增刪改
mysql> create table user(
-> id int auto_increment,
-> name varchar(30) not null,
-> money int not null,
-> province varchar(20) default null,
-> age tinyint unsigned not null,
-> sex enum('女', '男') not null,
-> primary key(id)
-> )engine=innodb default charset=utf8;
【注】單選在插入值的時候,可以直接使用1 2矾湃,那么1代表女亡脑,2代表男,
enum(單選)類型如果不給值邀跃,默認(rèn)是第一個
Set(多選)類型如何插入霉咨?
set('吃', '喝', '玩', '睡', '滾')
1 2 4 8 16
4|8|16 如果是后三個,可以這么寫
28 也可以加起來拍屑,這么寫
1.插入記錄
insert into 表 values(值1,值2,值n);
insert into star values(1, '王寶強', 1000, '河北' ,32, 2);
說明:向user表中插入值id為1途戒,姓名為王寶強,余額為0僵驰,省份為河北喷斋,年齡為32,性別為2(男)
2.對指定字段的插入
insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
insert into star(name, money, province, age, sex) values('郭德綱', 1000000, '天津', 43, 0);
說明:向user表中插入值蒜茴,姓名為郭德綱星爪,余額為1000000,省份為天津粉私,年齡為43顽腾,性別為0(男)
如果沒有賦值,就為默認(rèn)值诺核,如果默認(rèn)值也沒有就報錯崔泵,id不用插入秒赤,系統(tǒng)會自動維護
3.插入多個值
insert into star(name, money, province, age, sex)
values('黃曉明', 2000000, '山東', 39, 0),
( 'angelababy', 3000000, '上海', 27, 1),
( '陳赫', 150000, '福建', 31, 0);
【注意】插入數(shù)據(jù)可以不傳值的情況:
(1)自增的字段可以不用傳入值(每插入一條該字段的值會自動加1)
(2)有默認(rèn)值
(3)可為空的字段可不傳
說明:插入記錄2的方式為更常用的用法
4.刪除記錄
delete from 表 where 條件;
delete from star where id=5;
說明:刪除表star中id為5的行
【注意】:where必須要加,否則后果自負(fù)
5.修改記錄
update 表 set 字段1=值1,字段2=值2 where 條件;
update star set money=money+3, sex=1 where id=1;
說明:將star表中id為1的行的money設(shè)為原來的數(shù)字加上3憎瘸,sex設(shè)為1
6.基礎(chǔ)查詢
select * from 表;
select * from star;
說明:查詢star表中所有字段中的所有結(jié)果
3、可視化工具
當(dāng)你去操作數(shù)據(jù)庫的時候陈瘦,其實有3中方式
(1)使用mysql自帶的客戶端進行操作
(2)使用一些第三方的可視化工具管理數(shù)據(jù)庫 比如navicate幌甘、sqlyog
(3)使用代碼去操作數(shù)據(jù)庫,比如python痊项、java锅风、php
4、DQL
query : 查詢
模糊查詢:like '%德%' 只要有 德 字的都符合要求
% 代表任意多的字符
like '柳_' 叫 柳某 的都符合要求
_ 代表一個任意字符
limit:
limit 2 : 在結(jié)果集中只要前兩個
limit offset, number : offset代表偏移量鞍泉,number代表數(shù)量
LIMIT number1 OFFSET number2 : number1 是數(shù)量 number2 是偏移量
上網(wǎng)的時候皱埠,經(jīng)常會有分頁,每頁顯示10條咖驮,
第一頁:select * from table limit 0, 10
第二頁:select * from table limit 10, 10
第三頁:select * from table limit 20, 10
第n頁:select * from table limit (n-1)*10, 10
對于查詢或者排序后的結(jié)果集边器,如果希望只顯示一部分,使用limit關(guān)鍵字對結(jié)果集進行數(shù)量限制托修。
分組:
字段只能出現(xiàn)分組字段和統(tǒng)計信息忘巧,其它的字段出現(xiàn)沒有意義
select province, count(*) from user group by province;
select province, count(*) as c from user group by province having c>=2;
【注】having經(jīng)常跟在group by的后面,where是跟在表的后面
select使用順序
SELECT xxx FROM xxx WHERE xxx GROUP BY xxx HAVING xxx ORDER BY xxx LIMIT xxx;
取出擁有年齡大于30歲的明星個數(shù)大于兩個且第二多的省份
基礎(chǔ)查詢
select * from 表;
select * from star;
說明:查詢star表中所有字段中的所有結(jié)果
指定字段查詢
select 字段 from 表;
select id, name, money from star;
說明:查詢star表中id, username, money字段
指定字段組合不重復(fù)記錄
select distinct 字段 from 表;
select distinct age, sex from star;
說明:查詢star表中age和sex組合的不重復(fù)結(jié)果
條件查詢
select 字段 from 表 where 條件;
select * from star where age=43;
說明:查詢star表中age為43的所有結(jié)果
where后可接的條件
示例:
結(jié)果集排序
select 字段 from 表 order by 字段 排序關(guān)鍵詞
select id, name, money from star order by money desc;
說明:查詢star表中的id, name, money字段睦刃,按照余額進行降序排序
asc--->升序排列砚嘴,從小到大(默認(rèn))
desc--->降序排列,從大到小
多字段排序
select 字段 from 表 order by 字段1 desc|asc, ... ,字段n desc|asc;
select id, name, money from star order by money desc, age asc;
說明:查詢star表中的id, name, money字段涩拙,按照余額進行降序排序,若余額全都一樣际长,則再使用age進行升序排序
限制查詢的結(jié)果集
select 字段 from 表 limit 數(shù)量;
select id, name, money from star limit 5;
說明:顯示前5個記錄
限制排序后的結(jié)果集
select 字段 from 表 order by 字段 排序規(guī)則 limit 數(shù)量
select id, name, money from star order by money desc limit 5;
說明:按照money來排序,顯示前5個最有錢的記錄
結(jié)果集區(qū)間選擇
select 字段 from 表 limit 偏移量,數(shù)量
select id, name, money from star limit 0,3;
說明:取從第一條開始的三條記錄
常用統(tǒng)計函數(shù)
統(tǒng)計函數(shù)使用
select 函數(shù)(字段) from 表
select count(id) from star;
說明:查詢star表的id總數(shù)
分組
select * from 表 group by 字段
select * from star group by province;
說明:按照province進行分組
分組統(tǒng)計
select * from 表 group by 字段
select count(*), province from star group by province;
說明:對分組進行單獨統(tǒng)計
結(jié)果集過濾
select * from 表 group by 字段 having 條件
select count(province) as result , province from star group by province having result>2;
說明:對province分組并統(tǒng)計總數(shù)兴泥,將分組結(jié)果中大于2的分組顯示出來
整體使用SQL
要求:
1.在star表中找出年齡大于30的明星
2.按照省份分組
3.找到明星個數(shù)大于1的省份
4.找到個數(shù)第二多的省份及個數(shù)
day13-mysql工育、redis
1、多表聯(lián)合查詢
多表聯(lián)合
mysql> create table user(
-> id int auto_increment,
-> name varchar(30) not null,
-> gid varchar(10) default 0,
-> primary key(id)
-> )engine=innodb default charset=utf8;
mysql> create table goods(
-> gid int auto_increment,
-> name varchar(30) not null,
-> price int not null,
-> category varchar(20) not null,
-> primary key(gid)
-> )engine=innodb default charset=utf8;
mysql> insert into user(name, gid) values('郭德綱', 1),
-> ('岳云鵬', 2),
-> ('曹云金', 0),
-> ('于謙', 3),
-> ('牛群', 1),
-> ('馮鞏', 1),
-> ('大兵', 4),
-> ('馬三立', 0),
-> ('賈玲', 2);
隱式內(nèi)連接
select user.name as uname, goods.name as gname from user, goods where user.gid=goods.gid;
顯示內(nèi)連接
select * from user as u join goods as g on u.gid=g.gid;
select u.name as uname, g.name as gname from user as u join goods as g on u.gid=g.gid;
三表鏈接格式
select * from user as u join goods as g on u.gid=g.gid join price as p on g.pid=p.pid
多表聯(lián)合查詢分類
1.內(nèi)連接--->分為隱式內(nèi)連接和顯示內(nèi)連接
選出兩個表中存在連接關(guān)系的字段符合連接關(guān)系的那些記錄郁轻。
2.外連接--->分為左連接和外右連接
會選出其他不匹配的記錄翅娶,分為外左連接和外右連接
隱式內(nèi)連接
select 表1.字段 [as 別名], 表n.字段 from 表1 [別名], 表n where 條件;
select username, name from user, goods where user.gid=goods.gid;
說明:查詢用戶表中哪些用戶購買過商品,并將商品信息顯示出來
注意:以上方式稱為隱式內(nèi)連接好唯,因為沒有出現(xiàn)join關(guān)鍵字
顯式內(nèi)連接
select 表1.字段 [as 別名],表n.字段 from 表1 inner join 表2 on 條件;
select username, name from user inner join goods on user.gid=goods.gid;
說明:查詢用戶表中哪些用戶購買過商品竭沫,并將商品信息顯示出來
注意:以上方式的inner關(guān)鍵字換成cross同樣可以,其實也可以省略
外連接之左連接
select 表1.字段 [as 別名], 表n.字段 from 表1 left join 表n on 條件;
select * from user left join goods on user.gid = goods.gid;
說明:以左邊為主骑篙,查詢哪些用戶購買過商品蜕提,并將商品信息顯示出來
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
外連接之右連接
select 表1.字段 [as 別名], 表n.字段 from 表1 right join 表n on 條件;
select * from user right join goods on user.gid = goods.gid;
說明:以右邊為主,查詢哪些商品有用戶購買靶端,并將用戶信息顯示出來
右連接:包含所有的右邊表中的記錄甚至是左邊表中沒有和它匹配的記錄
1.查詢沒有被購買過的商品
select goods.name from goods left join user on goods.gid=user.gid where user.id is NULL;
- 查詢哪類商品是銷量冠軍
select category, count(*) as c from user join goods on user.gid=goods.gid group by category order by c desc limit 1;
3.查詢哪個商品是銷量冠軍
select goods.name, goods.price, count(*) as c from user join goods on user.gid=goods.gid group by goods.name order by c desc limit 1;
分組只能寫分組字段和統(tǒng)計字段谎势,寫其它字段報錯
進入mysql執(zhí)行如下指令
SET @@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
子(嵌套)查詢
select 字段 from 表 where 字段 in(條件)
select * from user where gid in (1,3,4); 說明:按照id 查詢指定用戶
select * from user where gid in (select gid from goods); 說明:將購買過商品的用戶信息顯示出來
記錄聯(lián)合
select 語句1 union[all] select 語句2
左連接 union 右連接; 說明:將商品表中的信息和用戶表中的信息的組合在一起
使用 union 和 union all 關(guān)鍵字凛膏,將兩個表的數(shù)據(jù)按照一定的查詢條件查詢出后,將結(jié)果合并到一起顯示脏榆。兩者主要的區(qū)別是把結(jié)果直接合并在一起猖毫,而 union 是將 union all 后的結(jié)果進行一次distinct,去除重復(fù)記錄后的結(jié)果须喂。
修改更新
update 表名 set 字段1=值1, …, 字段n=值n where 條件
update money set balance=balance-500 where userid = 15;
說明:修改money表吁断,將balance余額減500。要求userid為15
兩個表同時更新
update 表1,表2 set 字段1=值1, …, 字段n=值n where 條件
update user u, goods g set u.gid=0, g.price=1799 where u.id=8 and u.gid=g.gid;
說明:user表的別名設(shè)置為u坞生,將goods表的別名設(shè)置為g仔役;將u表的gid改為0,g表的price改為1799是己。執(zhí)行條件是:u.id = 8并且gid相等
清空表
truncate table 表名 清空表又兵,id會從1開始自增
delete from table 清空表,id從上次記錄的值開始
注意:delete刪除表中的所有數(shù)據(jù)卒废,自增的id會繼續(xù)從原有的值增加
創(chuàng)建用戶
mysql -h ip地址 -u用戶名 -p
Create user ‘用戶名’@‘用戶地址’ identified by ‘密碼’;
create user 'test'@'ip' identified by '密碼'
說明:創(chuàng)建用戶沛厨,并且設(shè)置密碼
刪除用戶
drop user ‘用戶名’@‘用戶地址’;
drop user ‘test’@‘192.168.10.1’;
授予權(quán)限
grant 權(quán)限 on . to ‘用戶名’@‘用戶地址’;
grant 權(quán)限 on . to ‘test’@‘192.168.10.1’;
剝奪權(quán)限
revoke 權(quán)限 on . from ‘用戶名’@‘用戶地址’;
revoke 權(quán)限 on . from ‘test’@‘192.168.10.1’;
2、索引
索引是什么升熊?索引就是個東西俄烁,類似是目錄的東西
數(shù)據(jù)庫在查詢的時候,是一條一條挨著查呢级野。查詢效率太低了页屠。
如何提高查詢效率?索引
如果在查詢的時候蓖柔,經(jīng)常通過某個字段查詢辰企,那就要考慮給這個字段添加索引。
索引的缺點:在插入的時候效率就比較低
索引有類型
普通索引
唯一索引 要確保唯一性
主鍵索引 是特殊的唯一索引况鸣,但是不能為空
全文索引
查看索引
show index from tablename;
show index from user;
查看user表的索引結(jié)構(gòu)
普通索引
唯一索引
主鍵索引
全文索引
刪除索引
3牢贸、數(shù)據(jù)庫導(dǎo)入導(dǎo)出
數(shù)據(jù)庫里面的表可以導(dǎo)出來,導(dǎo)出來一般都是sql腳本的東西镐捧, data.sql
【注】版本潜索,通過指令導(dǎo)出和通過不同的可視化工具導(dǎo)出,格式也不一樣懂酱。
mysql自帶的指令:
正常終端模式下
導(dǎo)出:mysqldump -uroot -p 數(shù)據(jù)庫名>c:\data.sql
導(dǎo)入:mysql -uroot -p 數(shù)據(jù)庫名<c:\data.sql
注意竹习,導(dǎo)入之前首先創(chuàng)建一個新的數(shù)據(jù)庫
Navicat導(dǎo)出和導(dǎo)入:
右鍵==》轉(zhuǎn)儲sql文件
右鍵==》運行sql文件
4、python操作數(shù)據(jù)庫
需要使用到第三方庫:pymysql列牺,在python交互界面輸入 import pymysql 看有沒有報錯整陌,報錯了就是沒有它,沒報錯就是有它
安裝之:pip install pymysql
代碼操作之
port只能是整型
import pymysql
# 第一步,連接數(shù)據(jù)庫泌辫,類似于指令里面的 mysql -uroot -p
# mysql -h地址 -uroot -p
'''
連接數(shù)據(jù)庫需要用到的參數(shù)
主機:host
端口:port
用戶名:user
密碼:password
指定數(shù)據(jù)庫:db
指定字符集:charset
'''
db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='dudu', charset='utf8')
# 連接成功之后随夸,得到一個對象
# print(db)
# 首先根據(jù)db得到游標(biāo),游標(biāo)就是執(zhí)行sql語句用到的東西
# cursor = db.cursor()
# 給cursor添加一個參數(shù)震放,讓其的到數(shù)據(jù)是一個字典
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
# 準(zhǔn)備sql語句宾毒,執(zhí)行sql語句
sql = 'select * from star'
# 返回結(jié)果rows是受影響的行數(shù)
rows = cursor.execute(sql)
# print(rows)
# 通過cursor的方法得到數(shù)據(jù)
# 返回一個元組,元組里面每個元素的值對應(yīng)的就是數(shù)據(jù)表中每個字段對應(yīng)的值
# 獲取內(nèi)容的時候澜搅,里面有個迭代器在記錄你的位置
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchmany(5))
# print(cursor.fetchmany(5))
# 元組里面套元組
# print(cursor.fetchall())
# 打印得到所有的用戶名
ret = cursor.fetchall()
for obj in ret:
print('我叫%s,我來自%s,我有%s¥' % (obj['name'], obj['province'], obj['money']))
# print(ret)
# 遍歷每一個元組
# for tp in ret:
# print(tp[1])
# 最后呀伍俘,要記得關(guān)閉
cursor.close()
db.close()
import pymysql
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='dudu', charset='utf8')
# print(db)
cursor = db.cursor()
sql = 'select * from start'
# 查詢語句,通過try-except勉躺,讓代碼更加健壯
try:
ret = cursor.execute(sql)
print(cursor.fetchall())
except Exception as e:
print(e)
finally:
cursor.close()
db.close()
import pymysql
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='dudu', charset='utf8')
cursor = db.cursor()
'''
# 準(zhǔn)備sql語句
obj = {'name': '李云龍', 'money': '20', 'province': '河南', 'age': 36, 'sex': '男'}
# 注意,這里的引號需要加
sql = 'insert into star(name, money, province, age, sex) values("%s", "%s", "%s", "%s", "%s")' % (obj['name'], obj['money'], obj['province'], obj['age'], obj['sex'])
'''
# id = 8
# sql = 'delete from star where id=%s' % id
sql = 'update star set name="馬德華" where id=12'
# 注意觅丰,沒有添加進去饵溅,是因為沒有提交,需要提交才能成功
try:
cursor.execute(sql)
# 提交妇萄,寫入磁盤
db.commit()
except Exception as e:
print(e)
# 回滾到最初始的狀態(tài)
db.rollback()
finally:
cursor.close()
db.close()
import pymysql
class MyMysql(object):
def __init__(self, host, port, user, password, db, charset):
self.host = host
self.port = port
self.user = user
self.password = password
self.db = db
self.charset = charset
# 鏈接數(shù)據(jù)庫
self.connect()
def connect(self):
# 鏈接數(shù)據(jù)庫和獲取游標(biāo)
self.db = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, db=self.db, charset=self.charset)
self.cursor = self.db.cursor()
def run(self, sql):
ret = None
try:
ret = self.cursor.execute(sql)
self.db.commit()
except Exception as e:
self.db.rollback()
finally:
self.close()
return ret
def close(self):
self.cursor.close()
self.db.close()
def insert(self, sql):
return self.run(sql)
def update(self, sql):
return self.run(sql)
def delete(self, sql):
return self.run(sql)
def read_one(self, sql):
ret = None
try:
self.cursor.execute(sql)
# 獲取得到數(shù)據(jù)
ret = self.cursor.fetchone()
except Exception as e:
print('查詢失敗')
finally:
self.close()
return ret
def read_many(self, sql):
ret = None
try:
self.cursor.execute(sql)
# 獲取得到數(shù)據(jù)
ret = self.cursor.fetchall()
except Exception as e:
print('查詢失敗')
finally:
self.close()
return ret
5蜕企、redis安裝和學(xué)習(xí)
什么是redis?是一個基于內(nèi)存的數(shù)據(jù)庫冠句,計算機里面轻掩,有內(nèi)存,有硬盤
文件都在硬盤中存放懦底,代碼在運行的時候唇牧,有一個變量a
內(nèi)存:讀寫快,但是斷電消失聚唐,不大
硬盤:讀寫慢丐重,但是可以持久化保存,大杆查,隨便存
什么是NoSQL扮惦? not only sql 非關(guān)系型數(shù)據(jù)庫
鍵值對,根據(jù)鍵立馬就可以得到值
redis亲桦、MongoDB
redis官網(wǎng):redis.io redis.cn
5種數(shù)據(jù)類型:字符串(string)崖蜜、列表(list)、集合(set)客峭、哈希(hash)豫领、有序集合(zset)
redis官網(wǎng)只有l(wèi)inux版本的,不支持windows
學(xué)習(xí)方式:指令交互桃笙,可視化氏堤,代碼操作