文章目录

  • 前言
  • # 第一部分:数据库练习
    • 准备数据
      • 创建数据表
      • 插入数据
    • SQL演练
      • 1. SQL语句的强化
      • 2. 创建"商品分类"表
      • 3. 同步表数据
      • 4. 创建“商品品牌表”表
      • 5. 同步数据
      • 6. 修改表结构
      • 7. 外键
        • 外键取消
        • 外键:其实在设计定义数据库的时候,就已经确定了要不要使用外键:比如下面的逻辑。
      • 8. 其实就是多创建一个表,然后从原来的表上使用外键进行关联:下面代码可以一次性复制粘贴进行联系
  • # 第二部分:Python 操作 MySQL
    • 1. 初尝python与mysql交互
    • 2. pymysql查询数据库、面向对象
    • 3. pymysql添加数据库、面向对象
    • 4. 此处介绍`SQL注入`
    • 5.防止SQL注入
  • # 第三部分:MySQL高级
    • 1. 视图
      • 1.问题
      • ······
      • 6. 删除视图
      • 7. 视图demo
      • 8.视图的作用
    • 2. 事务
    • 3. 索引
    • 4. 账户管理
    • 5. MySQL主从
  • 后记

前言

  • MySQL数据库的基本使用前面简单记录了下mysql,这篇文章主要的知识点是,如何用Python操作MySQL数据库
  • 首先,使用Python操作MySQL数据库,就需要有一个基本的数据库去操作。因此,这篇文章的第一部分:数据库练习就是创建一个jingdong数据库;
  • 接下来,就是第二部分:Python 操作 MySQL,用Python操作第一部分创建的数据库;
  • 最后,第三部分:MySQL高级,主要记录数据库设计的思想,什么是视图虚表)、事务索引账户管理的思想、主从的思想。

推荐资料:

  • 菜鸟:MySQL 教程
  • MySQL笔记(pymysql)
  • https://github.com/wmh02240/MySQL-Notes
  • 服务器及软件———MySQL数据库,可以浏览下这个博主的内容。
  • 菜鸟:python3-mysql
  • 视频:pymysql的使用
  • B站:python和mysql视频,有口音,但是讲得还可以。

# 第一部分:数据库练习

准备数据

创建数据表

create database jingdong charset=utf8;use jingdong;-- 商品表
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(50) not null,price decimal(10,3) not null default 0,is_show bit not null default 1,is_saleoff bit not null default 0
);

插入数据


insert into goods values (0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default),(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default),(0,'g150th 15.6英寸笔记本','游戏本','雷神','8499',default,default),(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default),(0,'x240 超级本','超级本','联想','4880',default,default),(0,'u330p 13.3英寸超级本','超级本','联想','4299',default,default),(0,'svp13226scb 触控超级本','超级本','索尼','7999',default,default),(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default),(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default),(0,'ipad mini 配备retina显示屏','平板电脑','苹果','2788',default,default),(0,'ideacentre c340 20英寸一体电脑','台式机','联想','3499',default,default),(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default),(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default),(0,'at7-7414lp 台式电脑 linux','台式机','苹果','3699',default,default),(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default),(0,'powereedge ii服务器','服务器/工作站','戴尔','5388',default,default),(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default),(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default),(0,'商务双肩背包','笔记本配件','索尼','99',default,default),(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default),(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

SQL演练

1. SQL语句的强化

---------------------------------------------------
--------------- 此处用来巩固之前所学------------------
--------------- 不需要可以直接看后面------------------
---------------------------------------------------
-- 查看所有数据库
show databases;-- 查看当前使用数据库
select database();-- 查看创建数据库的语句
-- show create database ...
show create database jingdong;-- 查看当前数据库中的所有数据表
show tables ;-- 查看数据表的结构
-- desc 数据表的名字
desc table_name;-- 删除某一个数据表
drop table table_name;-- 查询数据goods所有内容
select * from goods;
---------------------------------------------------
--------------- 不需要前面巩固可以从这里开始----------
----------------------------------------------------- 查询goods中商品名称是“超极本”的
select * from goods where cate_name="超级本";-- 查询goods中价格小于3000的
select * from goods where price < 3000;-- 查询cate_name为'超极本'的商品名称、价格
select name,price from goods where cate_name="超级本";
select name as 商品名称,price as 商品价格 from goods where cate_name="超级本";-- 显示商品的种类
-- 思考: 后面两个分组去重有什么区别
select cate_name from goods;
select distinct cate_name from goods;
-- select distinct  cate_id from goods;
select cate_name from goods group by cate_name;
-- 注意此处其实是要和聚合函数结合使用才能体现其价值
select cate_name,group_concat(name) from goods group by cate_name;-- 求所有电脑产品的平均价格,并且保留两位小数
select round(avg(price), 2) from goods;
select round(avg(price), 2) as avg_price from goods;-- 显示每种商品的平均价格
select cate_name, avg(price) from goods group by cate_name;
select cate_name, avg(price) from jingdong.goods group by cate_name;-- 查询每种商品中,平均价,最便宜,最贵,数量
select cate_name, avg(price), min(price), max(price), count(*), group_concat(name) from jingdong.goods group by cate_name;-- 查询所有价格大于平均价格的商品,并且按照降序排列
-- 思路
select round(avg(price), 4) from goods;
select id, name, price from goods where price > 5570.5741;
select id, name, price from goods where price > (select round(avg(price), 4) from goods) order by price desc;-- 查询每种类型电脑中最贵的电脑信息
select cate_name, max(price), group_concat(cate_name, " ", name), count(*) from goods group by cate_name;
--说明:进行分组的时候使用group by,前面的select查询的信息必须要有进行分组的字段依据.
-- select * from goods group by cate_name;  --错误--思路
select * from goods
inner join(select cate_name,min(price) as min_price, max(price) as max_price, avg(price) as avg_price, count(*) from goods group by cate_name) as goods_new_info
on goods.cate_name = goods_new_info.cate_name and goods.price = goods_new_info.max_price;--左连接查询
select * from (select cate_name, max(price) as max_price from goods group by cate_name) as new_goods_infoleft join goods on new_goods_info.cate_name = goods.cate_name and new_goods_info.max_price = goods.price;select * from (select cate_name, max(price) as max_price from goods group by cate_name) as new_goods_inforight join goods on new_goods_info.cate_name = goods.cate_name and new_goods_info.max_price = goods.price;

2. 创建"商品分类"表

--一个表不方便管理
-- 十分注意:通过另一个表的字段来存储一个表的主键的时候,两个字段的数据类型必须相同-- 创建goods_cates表并直接插入值
create table if not exists goods_cates(id int unsigned primary key auto_increment not null,name varchar(50) not null
);-- 查询goods表中商品的种类
select cate_name as name from goods group by cate_name;--将分组结果插入到goods_cates--为指定字段插入值
insert into goods_cates (name) select cate_name from goods group by cate_name; select * from goods_cates;

3. 同步表数据

-- 同步表数据 通过goods_cate表来更新goods表
-- 十分注意:通过另一个表的字段来存储一个表的主键的时候,两个字段的数据类型必须相同
select * from goods as g inner join goods_cates as c on g.cate_name = c.name;
-- 通过goos_cates数据表来更新goods表
update goods as g inner join goods_cates as c on g.cate_name = c.name set g.cate_name = c.id;

4. 创建“商品品牌表”表

58到家数据库30条军规解读

-- 创建商品品牌数据表  先查询紧接着插入  注意name值要一样
create table goods_brands(id int unsigned primary key not null auto_increment,name varchar(40) not null)select brand_name as name from goods group by brand_name;select * from goods_brands;

5. 同步数据

-- 同步数据
update goods as g inner join goods_brands as b on g.brand_name = b.name set g.brand_name = b.id;

6. 修改表结构

-- 查看goods的数据表结构
desc goods;-- 修改表结构 :通过alter table修改表结构
-- g.brand_name与b.id字段的数据类型要一致
alter table goods change brand_name brand_id int unsigned not null;
alter table goods change cate_name cate_id int unsigned not null; --change表示重命名改动
-- 可以同时修改多个字段
-- alter table goods
-- change brand_name brand_id int unsigned not null,
-- change cate_name cate_id int unsigned not null;

7. 外键

-- 分别在good_cates 和 goods_brands表中插入记录
insert into goods_cates (name) values ('路由器'),('交换机'),('网卡');
insert into goods_brands (name) values ('海尔'),('清华同方'),('神州');-- 在goods数据表中写入任意记录
-- insert into goods (name, cate_id, brand_name, price) values ('LasterJet Pro P1606dn 黑白激光打印机', 12, 4, '1489');-- 查询所有商品的详细信息(通过内连接)
select g.id,g.name,c.name,b.name,g.price from goods as g
inner join goods_cates as c on g.cate_id=c.id
inner join goods_brands as b on g.brand_id=b.id;-- 查询所有商品的详细信息(通过左连接)
select g.id,g.name,c.name,b.name,g.price from goods as g
left join goods_cates as c on g.cate_id=c.id
left join goods_brands as b on g.brand_id=b.id;-- 设置外健
-- 给goods表cate_id 字段添加外健进行约束
alter table goods add foreign key (cate_id) references goods_cates(id);
alter table goods add foreign key (brand_id) references goods_brands(id);

外键取消

show create table goods;
-- 在实际开发中很少使用外健
-- 外健的使用会极大降低数据库的更新的效率
-- 可以禁止使用外健
-- 真正开发过程中约束可以通过语法逻辑进行控制-- 取消外健
-- 首先获取外键约束的名称 : 通过show create table goods;来获取
-- 然后通过获取的名称来删除外健  外健名称在show create table goods;生成的语句里面
alter table goods drop foreign key goods_ibfk_2;select * from goods as g
left join goods_cates as c on g.cate_id=c.id
left join goods_brands as b on g.brand_id=b.id;select g.*, c.name as cate_name, b.name as brand_name
from goods as g
left join goods_cates as c on g.cate_id=c.id
left join goods_brands as b on g.brand_id=b.id order by price;select * from 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(50) not null,price decimal(10,3) not null default 0,is_show bit not null default 1,is_saleoff bit not null default 0,foreign key(cate_id) references goods_cates(id);foreign key(brand_id) references goods_brands(id);
);

8. 其实就是多创建一个表,然后从原来的表上使用外键进行关联:下面代码可以一次性复制粘贴进行联系

-- 订单表
create table orders(id int unsigned primary key  auto_increment not null ,order_data_time datetime not null ,customers_id int unsigned not null
);
-- 设置外键
alter table orders add foreign key (customers_id) references customers(id);-- 顾客表
create table customers(id int unsigned primary key auto_increment not null ,name varchar(150) not null ,address varchar(150) not null ,tel varchar(20) not null ,passwd varchar(30) not null
);-- 订单详情表
create table order_detail(id int unsigned auto_increment primary key not null ,quality int unsigned not null ,order_id int unsigned not null ,good_id int unsigned not null
);
alter table order_detail add foreign key (order_id) references orders(id);
alter table order_detail add foreign key (good_id) references goods(id);desc orders;desc goods;

# 第二部分:Python 操作 MySQL

安装pymysql pip install pymysql

  • 其实python当作MySQL客户端

1. 初尝python与mysql交互

from pymysql import *# pymysql操作数据库流程:开始-创建connection-获取cursor-mysql语句-关闭cursor-关闭connection-结束def main():#创建connection连接  连接对象conn = connect(host = "localhost", port = 3306, user = 'root', password = '123456', database = 'jingdong', charset = 'utf8')#获取Cursor对象  游标对象cs1 = conn.cursor()count = cs1.execute('select id, name from goods where id > 4')print("打印受影响的行数:", count)# print(cs1.fetchall())# print(cs1.fetchmany(2))for i in range(count):#获取查询的结果result = cs1.fetchone() #返回一个元组  fetchmany()和fetchall()返回的结果是元组套元组print(result)cs1.close()conn.close()if __name__ == '__main__':main()

2. pymysql查询数据库、面向对象

from pymysql import *class JD(object):def __init__(self):# 创建connection连接  连接对象self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='jingdong', charset='utf8')# 获取Cursor对象  游标对象self.cursor = self.conn.cursor()def __del__(self):# 关闭cursor对象self.cursor.close()self.conn.close()def execute_sql(self, sql):self.cursor.execute(sql)for temp in self.cursor.fetchall():print(temp)def show_all_items(self):sql = "select * from goods;"self.execute_sql(sql)def show_cates(self):sql = "select name from goods_cates;"self.execute_sql(sql)def show_brands(self):sql = "select name from goods_brands;"self.execute_sql(sql)# @staticmethod   #静态方法def print_menu(self):print("--------------------京东--------------------")print("1:所有的商品")print("2:所有的商品分类")print("3:所有的商品品牌分类")num = input("请输入对应功能序号:")return numdef run(self):while True:num = self.print_menu() #实例方法可以调任何方法if num == "1":#调用所有商品self.show_all_items()elif num == "2":self.show_cates()elif num == "3":self.show_brands()else:print("输入有误,请重新输入!")# 面向对象的优点:能封装的尽量封装,调用者很简单,嵌套调方法也很容易,这些基本的方法放进一个基类中,通过类的继承,可以重新写一些新的方法。
def main():#创建一个京东商城对象jd = JD()#调用这个对象的run方法jd.run()if __name__ == "__main__":main()

3. pymysql添加数据库、面向对象

  • 增删改涉及到数据库的变更,查询不改变数据库

  • pymysql中凡是涉及到数据库的增删改时,如果不输入commit,数据是不会插入表中,但是每次插入值之后(不提交)数据表的id字段(auto increament)还是增加的,通过show create table table名查看,目的是解决高并发

  • 过程中的错误,实际应用中,数据库中值得插入属于高并发模式,哪个先抢到即先占领ID字段的值,防止后面多个插入进行提交之后造成的混乱错误.
    -不管是增删改哪一种,只要commit之后数据开始生效.

  • 如果数据插入错误,可以采用回滚rollback函数实现,前提是不提交,只要一提交数据就生效,注意的是如果进行增删改操作,但是发现数据有误就不提交,且进行了rollback,如果再进行新的增删改操作并

  • commit提交,因之前进行的错误增删改操作而造成的id字段增长不会倒回去,只能在之前的基础上继续增长.

from pymysql import *class JD(object):def __init__(self):# 创建connection连接  连接对象self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='jingdong', charset='utf8')# 获取Cursor对象  游标对象self.cursor = self.conn.cursor()def __del__(self):# 关闭cursor对象self.cursor.close()self.conn.close()def execute_sql(self, sql):self.cursor.execute(sql)for temp in self.cursor.fetchall():print(temp)def show_all_items(self):sql = "select * from goods;"self.execute_sql(sql)def show_cates(self):sql = "select name from goods_cates;"self.execute_sql(sql)def show_brands(self):sql = "select name from goods_brands;"self.execute_sql(sql)def add_brands(self):item_name = input("输入新商品名称:")# sql = """inseart into good_brand (name) values ("%s") % item_name"""sql = "insert into goods_brands (name) values ('%s')" % item_nameself.cursor.execute(sql)self.conn.commit()  #确定提交# self.conn.rollback() #回滚@staticmethod    #实例方法  不需要selfdef print_menu():print("--------------------京东--------------------")print("1:所有的商品")print("2:所有的商品分类")print("3:所有的商品品牌分类")print("4:添加商品品牌")num = input("请输入对应功能序号:")return numdef run(self):while True:num = self.print_menu()if num == "1":#调用所有商品self.show_all_items()elif num == "2":self.show_cates()elif num == "3":self.show_brands()elif num == "4":self.add_brands()else:print("输入有误,请重新输入!")# 面向对象的优点:能封装的尽量封装,调用者很简单,嵌套调方法也很容易,这些基本的方法放进一个基类中,通过类的继承,可以重新写一些新的方法。
def main():#创建一个京东商城对象jd = JD()#调用这个对象的run方法jd.run()if __name__ == "__main__":main()

4. 此处介绍SQL注入

# SQL注入
# 此处商品名称输入为:'or 1=1 or '1时即可打印出所有数据
#                   'or 1=1 or'1或者 'or 1=1 or' 这里的两个单引号表示与'%s'的两个单引号进行配对 单引号双引号取决于input接受输入时的"%s"还是'%s'  select * from goods where name = ''or 1=1 or'1';
#                                                                                select * from goods where name = ""or 1=1 or "";from pymysql import *class JD(object):def __init__(self):# 创建connection连接  连接对象self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='jingdong', charset='utf8')# 获取Cursor对象  游标对象self.cursor = self.conn.cursor()def __del__(self):# 关闭cursor对象self.cursor.close()self.conn.close()def execute_sql(self, sql):self.cursor.execute(sql)for temp in self.cursor.fetchall():print(temp)def show_all_items(self):sql = "select * from goods;"self.execute_sql(sql)def show_cates(self):sql = "select name from goods_cates;"self.execute_sql(sql)def show_brands(self):sql = "select name from goods_brands;"self.execute_sql(sql)def add_cates(self):cate_name = input("请输入商品名称:")sql = "insert into goods_cates (name) values ('%s')" % cate_nameself.cursor.execute(sql)self.conn.commit()def add_brands(self):item_name = input("输入新商品品牌名称:")sql = "insert into goods_brands (name) values ('%s')" % item_nameself.cursor.execute(sql)self.conn.commit()  #确定提交# self.conn.rollback() #回滚def get_info_by_name(self):find_name = input("请输入要查询的商品brand_id:")sql = """select * from goods where brand_id = '%s';""" % find_nameprint("——————————————>%s<-------------" % sql)self.execute_sql(sql)@staticmethoddef print_menu():print("--------------------京东--------------------")print("1:所有的商品")print("2:所有的商品分类")print("3:所有的商品品牌分类")print("4:添加商品")print("5:添加商品品牌")print("6:根据名字查询一个商品")num = input("请输入对应功能序号:")return numdef run(self):while True:num = self.print_menu()if num == "1":#调用所有商品self.show_all_items()elif num == "2":self.show_cates()elif num == "3":self.show_brands()elif num == "4":self.add_cates()elif num == "5":self.add_brands()elif num == "6":self.get_info_by_name()else:print("输入有误,请重新输入!")def main():#创建一个京东商城对象jd = JD()#调用这个对象的run方法jd.run()if __name__ == "__main__":main()

5.防止SQL注入

from pymysql import *class JD(object):def __init__(self):# 创建connection连接  连接对象self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='jingdong', charset='utf8')# 获取Cursor对象  游标对象self.cursor = self.conn.cursor()def __del__(self):# 关闭cursor对象self.cursor.close()self.conn.close()def execute_sql(self, sql):self.cursor.execute(sql)for temp in self.cursor.fetchall():print(temp)def show_all_items(self):sql = "select * from goods;"self.execute_sql(sql)def show_cates(self):sql = "select name from goods_cates;"self.execute_sql(sql)def show_brands(self):sql = "select name from goods_brands;"self.execute_sql(sql)def add_brands(self):item_name = input("输入新商品名称:")sql = "insert into goods_brands (name) values ('%s')" % item_nameself.cursor.execute(sql)self.conn.commit()  #确定提交# self.conn.rollback() #回滚def get_info_by_name(self):find_name = input("请输入要查询的商品名称:")# sql = """select * from goods where name = "%s"; """ % find_name# print("——————————————>%s<-------------" % sql)# self.execute_sql(sql)sql = "select * from goods where name = %s;"self.cursor.execute(sql, [find_name])  #防止SQL注入将输入值添加到一个字典中,让其完成配对 cursor.execute自动匹配find_name到sql中%sprint(self.cursor.fetchall())@staticmethoddef print_menu():print("--------------------京东--------------------")print("1:所有的商品")print("2:所有的商品分类")print("3:所有的商品品牌分类")print("4:添加商品品牌")print("5:根据名字查询一个商品")num = input("请输入对应功能序号:")return numdef run(self):while True:num = self.print_menu()if num == "1":#调用所有商品self.show_all_items()elif num == "2":self.show_cates()elif num == "3":self.show_brands()elif num == "4":self.add_brands()elif num == "5":self.get_info_by_name()else:print("输入有误,请重新输入!")def main():#创建一个京东商城对象jd = JD()#调用这个对象的run方法jd.run()if __name__ == "__main__":main()

# 第三部分:MySQL高级

1. 视图

1.问题

······

6. 删除视图

drop view 视图名称;
eg:
drop view v_goods_info;

7. 视图demo

select *from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands as b on g.brand_id=b.id;

select g.*,c.name as cate_name,b.name as brand_name from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands as b on g.brand_id=b.id;

create view v_goods_info as select g.*,c.name as cate_name,b.name as brand_name from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands
as b on g.brand_id=b.id;
show tables;

select *from v_goods_info;
select *from v_goods_info limit 5;

注意,虚表只能用来查找,不能修改,如下:

8.视图的作用

  1. 提高了重用性,就像一个函数
  2. 对数据库重构却不影响程序的运行
  3. 提高了安全性能,可以对不同的用户
  4. 让数据更加清晰
  • 个人理解,虚表只是存储了一个链接,自动加载,要修改内容还是要修改实际存在的内容,就是原来的表怎么修改就怎么修改,修改完之后,虚表自动变化。

2. 事务




事务这里可以分为提交和回滚:就是提交失败,你就回滚回去

# 所谓事务,即一个操作序列,即这些操作要么都执行 要么都不执行 是一个不可分割的工作单元.# 开启事务
begin;
# 或者
start transaction# python中默认已经开启了事务,必须commit之后数据才可以提交# mysql命令行工具执行完语句之后自动进行了commit,但是一旦开启了事务,不提交,数据就不会写入数据库,同时该条记录处于上锁状态,其他用户此时对这条记录进行操作的话会处于等待状态,
# 必须进行提交之后另一个用户才可以对此字段进行操作,这也是隔离性的体现,保证数据的安全.# 原子性:保证了操作要么成功,要么不成功.
# 一致性:保证了数据在commit之前不会因为系统等其他外部因素造成数据错误
# 隔离性:一个SQL语句的执行不会影响另一个SQL语句的执行.
# 持久性:一旦事务提交,则会永久保存在数据库中.

3. 索引

# 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个重要组成部分),它们包含着对数据表里所有记录的引用指针.加快数据库的查询速度create table test_index(title varchar(10));
########################################################
# 接下来,插入10万条数据到test_index.py(代码见后面)
########################################################
select count(*) from test_index;# 开始运行时间监测
set profiling = 1;
select * from test_index where title = 'haha-99999';# 查看执行时间
show profiles;# 为表test_index的title字段创建索引title_index
create index title_index on test_index(title(10));# 执行查询语句
select * from test_index where title = 'haha-99999';show profiles;#查看索引
show index from test_index;
show index  from goods;# 创建索引
#     如果指定字段是字符串 需要指定长度 建议长度和创建字段的数据长度一致
#     字段类型如果不是字符串 可以不填写长度
#     create index 索引名称 on 表名(字段名称(长度))# 删除索引
#     drop index 索引名称 on 表名;
########################################################
# 插入10万条数据到test_index.py
########################################################
from pymysql import connectdef main():#创建connection连接  连接对象conn = connect(host = "localhost", port = 3306, user = 'root', password = '123456', database = 'jingdong', charset = 'utf8')#获取Cursor对象  游标对象cs1 = conn.cursor()for i in range(100000):count = cs1.execute("insert into test_index values ('haha-%d')" % i)conn.commit()cs1.close()conn.close()if __name__ == '__main__':main()

4. 账户管理

MySQL用户管理:添加用户、授权、删除用户


5. MySQL主从

https://www.bilibili.com/video/av56919275?p=36

后记

  • 数据库就是一个底层存储系统,可以很好的理解对磁盘的01操作的封装。
  • 小王:给别人做东西,要不要一步到位;慢慢体会,哈哈哈!!!
  • 索引,就是为了追求效率,就是用C语言写的。

MySQL练习记录——利用Python的pymysql模块操作MySQL数据库相关推荐

  1. Python之Pymysql模块操作MySQL增删改查

    Python3 MySQL 数据库连接 - PyMySQL 驱动 PyMySQL 连接数据库,实现增删改查 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQ ...

  2. python pymysql实例_Python使用pymysql模块操作mysql增删改查实例分析

    Python使用pymysql模块操作mysql增删改查实例分析 发布时间:2020-09-30 16:42:12 来源:脚本之家 阅读:92 本文实例讲述了Python使用pymysql模块操作My ...

  3. Python使用cx_Oracle模块操作Oracle数据库详解

    本文实例讲述了Python使用cx_Oracle模块操作Oracle数据库.分享给大家供大家参考,具体如下: ORACLE_SID参数,这个参数是操作系统中用到的,它是描述我们要默认连接的数据库实例, ...

  4. 【Python】pymysql模块处理Mysql数据库

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含 ...

  5. python cx_oracle模块详解_Python使用cx_Oracle模块操作Oracle数据库详解

    这篇文章主要介绍了Python使用cx_Oracle模块操作Oracle数据库,结a合实例形式较为详细的分析了cx_Oracle模块的下载.安装及针对Orcle数据库的连接.执行SQL语句.存储过程等 ...

  6. Python进阶----pymysql模块的使用,单表查询

    Python进阶----pymysql模块的使用,单表查询 一丶使用pymysql ​   ​   1.下载pymysql包: pip3 install pymysql ​​   ​   2.编写代码 ...

  7. mysql六:数据备份、pymysql模块

    阅读目录 一 MySQL数据备份 二 pymysql模块 一 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备 ...

  8. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数 使用方式: 模块名称.conne ...

  9. python3wxpy下载_如何利用python之wxpy模块玩转微信

    wxpy也是一个python的模块,利用它我们可以做很多有意思的事情 首先利用一句代码我们就可以利用python登录网页版微信 bot = Bot(cache_path= True) 这条语句会产生一 ...

最新文章

  1. 实例 - 购物车 (列表、循环)
  2. [HNOI 2010]Bounce 弹飞绵羊
  3. AngularJS 2.0 学习记录(一)
  4. 如何将四个一字节的数转换为一个四字节数
  5. 分页数据的新展示方式---瀑布流
  6. Java进阶:@FunctionalInterface函数式接口使用说明
  7. 都2021年了,不会还有人连深度学习还不了解吧(六)-- Padding篇
  8. Adaboost 2
  9. Ajax请求Session超时解决
  10. Nessus安全测试插件编写教程(2)
  11. 利用计算机程序解决问题的基本过程,第四章第一节编制计算机程序解决问题
  12. 47. Python socket编程 2
  13. php如何把图片铺满,PHP如何裁剪图片成固定大小
  14. 强烈推荐 | 算法/深度学习/NLP面试笔记
  15. java invoke 返回类型_java-控制器处理程序方法支持的返回类型
  16. jscc控制器说明书_JSCC精研调速器 精研SF90E数显调速器 90W精研马达面板控制器
  17. Dockerfile搭建LNMP环境
  18. Android双系统实现
  19. 笔记本电脑ip服务器未运行怎么办,如何解决控制台打开(Pubwin)提示“服务器未启动或服务器IP地址已更改”的问题...
  20. win10系统怎么创建虚拟网卡?

热门文章

  1. linux系统下破解 Idea的步骤
  2. GP232RL国产USB串口如何兼容FT232RL开发资料
  3. DG232RL与FT232RL/GP232RL兼容开发资料
  4. 一键分析Android的BugReport
  5. QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之02【EC20模组硬件供电和开关机复位操作】
  6. C++别踩白块小游戏
  7. 好游戏必须知道玩家需要什么?
  8. 牛客网-Verilog篇
  9. CCS Invalid project description
  10. CIA-SSD: Confident IoU-Aware Single-Stage Object Detector From Point Cloud阅读