数据准备
--创建jd数据库
create database jd charset=utf8;
--使用jd数据库
use jd;
--创建商品goods表
create table goods(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
cate_name varchar(40) not null,
brand_name varchar(40) not null,
price decimal(10,2) not null default 0,
is_show tinyint not null default 1,
is_saleoff tinyint not null default 0
);
--插入数据
insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default);
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default);
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default);
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default);
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default);
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default);
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default);
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default);
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default);
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default);
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default);
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default);
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default);
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default);
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default);
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
数据表的拆分
数据表的拆分有很多方法,比如范围法,哈希法等,刚开始学数据库先介绍一下分表的思想。
从字面上理解,分表就是把一个表拆分开,把原本存储在一个表上的数据拆分到多个表上
为什么要分表呢?
数据库中数据量不一定是可控的,随着时间的推移,数据库中库越来越多,表中的信息越来越多,相应的增删改查的开销也越来越大;由于无法进行分布式部署,而一台服务器可使用的资源又是有限的,最终数据库所能承受的数据量,数据处理能力都将遇到瓶颈。
我们对上面创建的表进行分表
--创建商品分类表
create table goods_cate(
id int unsigned primary key not null auto_increment,
name varchar(40) not null
);
--查询goods表中商品的种类
select cate_name from goods group by cate_name;
--将分组结果写入goods_cate表中
insert into goods_cate (name) select cate_name from goods group by cate_name;
--同步数据
--通过goods_cate表来更新goods表
update goods as g inner join goods_cate as c on g.cate_name=c.name set g.cate_name=c.id;
python操作mysql
安装pymysql
python3:pip install pymysql
python 操作 MySql步骤
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JVPywrT-1575784715023)(256CC2CAC6424B4AA479AD2229F1D58F)]
connection
用于建立数据库的链接
coon=connect(参数)
- 参数host:链接mysql主机,如果是本地用’localhost’
- 参数part:链接mysql主机的端口,端口号3306
- 参数database:数据库名称
- 参数user:连接用户名
- 参数password:链接密码
- 参数charset:通信采用的编码方式,推荐utf8
from pymysql import *
conn = connect(host='localhost', port=3306, database='jd', user='root', password='root', charset='utf8')
对象的方法
- close()关闭
- commit()提交
- cursor()返回Cursor对象,用于执行sql语句并获得返回结果
Cursor对象
- 用于执行sql语
- 获取cursor对象:调用Connection对象的cursor()方法
cs1 = conn.cursor()
对象的方法
- close():先关闭游标再关闭连接
- execute(operation[,parameters]):执行语句,返回受影响的行数
- fetchone():执行查询语句时,获取查询结果集的第一行数据,返回一个元组
- fetchall():执行查询语句时,获取全部结果集,一行构成一个元组,再将这些元组装入一个元组返回
使用python连接数据库
from pymysql import *
try:
conn = connect(host='localhost', port=3306, database='jd', user='root', password='root', charset='utf8')
cursor = conn.cursor()
cursor.execute('select * from goods')
r = cursor.fetchall()
cursor.close()
conn.close()
print(r)
except Exception as e:
# print(e)
print('error:%d:%s'%(e.args[0],e.args[1]))