python学习-第16课
一、MySql操作
1.1.MySql的常用操作
1.1.1.查看自动提交功能
show variables like 'auto%';1.1.2.授权超级用户
grant all privileges on *.* to 'admin'@'%' identified by '123456' with grant option;1.1.3.查看库
show databases;1.1.4.查看库中的表
show tables;
1.1.5.查看表结构字段
desc tb;
1.1.6.查看建表语句
1.1.7.查看当前数据登录用户
select user();
1.1.8.查看当前使用的库
select database();
1.1.9.创建数据库
create database db1;
1.1.10.创建表
create table t1 (id int, name char(40) adress varchar(30));CREATE TABLE `student` (
`student_num` int(11) NOT NULL COMMENT '学生学号',
`student_name` varchar(5) CHARACTER SET utf8 NOT NULL COMMENT '学生姓名',
`student_sex` varchar(1) CHARACTER SET utf8 NOT NULL DEFAULT '男' COMMENT '学生性别',
`student_birthday` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '学生生日',
PRIMARY KEY (`student_num`),
KEY `student_num` (`student_num`)
)
1.1.11.查看数据库版本
select version();1.1.12.查看mysql状态
show status;1.1.13.修改mysql参数
先查询(修改最大连接数)show variables like 'max_connect%';
修改
set global max_connect_errors = 1000;
1.1.14.查看mysql队列
show processlist;1.2.MySql连接--通过函数定义
import pymysql def connect_mysql(): db_config={ "host":"127.0.0.1", "port":3306, "user":"root", "passwd":"123456", "db":"testdb", "charset":"utf8" } conn=pymysql.connect(**db_config) return conn
1.3.游标
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。即操作数据库。import pymysql
def connect_mysql():
db_config={
"host":"127.0.0.1",
"port":3306,
"user":"root",
"passwd":"123456",
"db":"testdb",
"charset":"utf8"
}
conn=pymysql.connect(**db_config)
return conn
if __name__ == '__main__':
conn=connect_mysql()
#创建游标
cursor=conn.cursor()
sql='''
CREATE TABLE `course` (
`course_num` int(11) NOT NULL COMMENT '课程号',
`course_name` varchar(100) CHARACTER SET utf8 NOT NULL COMMENT '课程名',
`course_hour` int(2) NOT NULL COMMENT '课程学时',
`course_score` varchar(10) CHARACTER SET utf8 NOT NULL COMMENT '课程学分',
PRIMARY KEY (`course_num`),
KEY `course_num` (`course_num`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='课程信息表';
'''
try:
#通过游标执行sql
cursor.execute(sql)
#关闭游标
cursor.close()
conn.commit()
except Exception as e:
raise e
finally:
conn.close()
游标常用方法:
cursor():创建游标对象
excute(sql[, args]):执行一个数据库查询或命令
fetchone():得到结果集的下一行
fetchmany([size = cursor.arraysize]):得到结果集的下几行
fetchall():得到结果集中剩下的所有行
executemany (sql, args):执行多个数据库查询或命令。尽量不使用executemany,通过程序循环不断调用excute函数
import pymysql
def connect_mysql():
db_config={
"host":"127.0.0.1",
"port":3306,
"user":"root",
"passwd":"123456",
"db":"testdb",
"charset":"utf8"
}
conn=pymysql.connect(**db_config)
return conn
if __name__ == '__main__':
try:
conn=connect_mysql()
sql="select * from employee"
#创建游标
cursor=conn.cursor()
#执行查询操作
cursor.execute(sql)
#获取所有结果
# alls=cursor.fetchall()
# print("获取所有结果:{0}".format(alls))
#获取一个结果
ones=cursor.fetchone()
print("获取一个结果:{0}".format(ones))
#获取2行数据
manys=cursor.fetchmany(size=2)
print("获取2行数据:{0}".format(manys))
except Exception as e:
#抛出异常
raise e
finally:
#关闭游标
cursor.close()
#关闭连接
conn.close()
1.4.数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
from DBUtils.PooledDB import PooledDB
db_config={
"host":"127.0.0.1",
"port":3306,
"user":"root",
"passwd":"123456",
"db":"testdb",
"charset":"utf8"
}
if __name__ == '__main__':
try:
pool=PooledDB(pymysql,5,**db_config) #5为连接池的最少连接数
conn=pool.connection()
cursor=conn.cursor()
sql="select * from employee"
cursor.execute(sql)
result =cursor.fetchall()
print(result)
except Exception as e:
raise e
finally:
cursor.close()
conn.close()
PooledDB传递参数说明:
- mincached : 启动时开启的空连接数量(缺省值 0 意味着开始时不创建连接)
- maxcached : 连接池使用的最多连接数量(缺省值 0 代表不限制连接池大小)
- maxshared : 最大允许的共享连接数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用。
- maxconnections : 最大允许连接数量(缺省值 0 代表不限制)
- blocking : 设置在达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误;其他代表阻塞直到连接数减少)
- maxusage : 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用)。当达到最大数值时,连接会自动重新连接(关闭和重新打开)
- setsession : 一个可选的SQL命令列表用于准备每个会话,如 ["set datestyle to german", ...]
1.5.数据库操作
1.5.1.设计表结构
对系统开发前,需要对所需的表进行设置,如下Student表
字段名 | 类型 | 是否为空 | 主键 | 描述 |
StdID | int | 否 | 是 | 学生ID |
StdName | varchar(100) | 否 | 学生姓名 | |
Gender | enum('M','F') | 是 | 性别 | |
Age | int | 是 | 年龄 |
1.5.2.建表
CREATE TABLE student(StdID int NOT NULL,
StdName VARCHAR(100) NOT NULL,
Gender enum('M','F'),
Age INT)
1.5.3.查询表
1.查询重复数据
select name,cout(name) from tb group by name having count(1) >1
2.查询前10行数据
select * from td limit 10
1.5.4.插入数据
1.插入多条数据INSERT INTO student (StdName, Gender, Age)
VALUES
("zhangsan", "M", 25),
("lisi", "F", 33),
("wangwu", "M", 28)
1.5.5.删除数据
delete from tb where 条件;
truncate tb 清空表数据,并不能恢复
drop tb 删除整个表
1.5.6.修改数据
update:
update student set StdName="test01",Gender="F" where id=2
1.5.6.创建并查看索引
1.创建索引
create index 库名_表名_列名1_列名2
alter table student add index idx_student_id(StdID);
2.查看索引
show index from tb;
alter table student add index idx_student_id(StdID);