在命令提示符使用以下命令安装pymysql
pip install pymysql
“”"
pymysql.connect(host,user, password,port,db,charset)
host:MySQL服务器所在的主机的ip;
user:用户名 password:密码
port:连接的MySQL主机的端口,默认是3306
db:连接的数据库名
charset:当读取数据出现中文会乱码的时候,需要我们设置一下编码;
python3默认采用的utf8字符集
import pymysql
db = pymysql.connect(
host="localhost",
user="root",
password="wt222",
port=3306,
db="school",
charset="utf8"
)
它负责执行我们熟悉的SQL语句
# 开启mysql的游标功能,创建一个游标对象;
cursor = db.cursor()
方法 | 功能 |
---|---|
execute(query, args) | 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数; |
executemany(query, args) | 执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数 |
区别是:批量添加的时候executemany比较快
我们执行完sql语句怎么查询返回的受影响的函数呢,有以下及格方法
方法 | 功能 |
---|---|
fetchone() | 返回一条结果行 |
fetchmany(size) | 接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据 |
fetchall() | 接收全部的返回结果行 |
insert into 表名(列名1,列名2) values(值1,值2)
delete from 表名 where 表达式 #删除单个语句
drop database 库名字; #输出数据库
drop table 表名字;#输出数据表
更新数据
update 表名 set 列名=值 [where 表达式]
alter
alter table 旧表名 rename to 新表名; #修改表名字
alter table 表名字 modify 列名 (新)数据类型; #修改数据类型 id char(10)---->id int
alter table 表名字 change 旧列名字 新列名字 新数据类型;#修改列名字 studentname-->name
alter table 表名 drop 列名;#删除某一列
alter table 表名 add 新列名 (新列名)数据类型;#添加一个列
alter table 表名 modify 列名1 数据类型 after 列名字2;#把列1插入到列2后面
select 要查询的列名1,列名2 from 表名1,表2
where 表达式1 and/not/or 表达式2
order by 列名字 desc/asc #order by 排序 desc降序 asc升序
limit 数字 #限制查询的条数 limit(2, 5)第2条数据到第5条数据
school数据库在系统mysql用以下命令创建:
create databsse school;
import pymysql
db = pymysql.connect(
host="localhost",
user="root",
password="wt222",
port=3306,
db="school",
charset="utf8"
)
cur = db.cursor()
sql = """
create table if not exists student(
s_id int(20) primary key auto_increment,
s_name varchar(4),
s_sex varchar(2),
s_class int,
birthday datetime
);
"""
#执行sql语句
cur.execute(sql)
#提交数据
db.commit()
在电脑的mysql中进行查询,也可以在python用查询语句
出现表结构类型图,说明创建成功
#创建游标对象---->负责执行sql语句
sql = """
insert into
student(s_name,s_sex,s_class,birthday)
values(%s,%s,%s,%s);
"""
list01 = [
('赵磊','男','一班',19990224),
('钱红','女','二班',20010811),
('王强','男','二班',20000920),
('李慧','女','四班',20020309),
('陈翔','男','三班',19930425),
('周久','男','五班',19981102),
('张欣','女','九班',20050306)
]
cur.executemany(sql,list01)
db.commit()
# 开启mysql的游标功能,创建一个游标对象;
cursor = db.cursor()
# 要执行的SQL语句,确保数据表中有相应的数据
sql = "select * from student;"
# 使用游标对象执行SQL语句;
cursor.execute(sql)
#多条数据
data = cursor.fetchall()
print(data)
# 断开数据库的连接,释放资源;
db.close()
# 开启mysql的游标功能,创建一个游标对象;
cursor = db.cursor()
# 要执行的SQL语句,确保数据表中有相应的数据
sql = "update student set s_name=%s, s_sex=%s where s_id=%s;"
try:
# 使用游标对象执行SQL语句;
cursor.execute(sql,('天天',"男",'三班'))
db.commit()
except Exception as ex:
print('插入语句错误' + str(ex))
db.rollback()
finally:
db.close()
# 开启mysql的游标功能,创建一个游标对象;
cursor = db.cursor()
# 要执行的SQL语句,确保数据表中有相应的数据
sql = 'delete from student where id=%s'
try:
cursor.execute(sql, 3)
db.commit()
except Exception as ex:
print('插入语句错误' + str(ex))
db.rollback()
finally:
db.close()
.创建school数据库,使用数据库(直接使用mysql进行执行)
以下使用python连接mysql进行执行
2.创建学生表(学号主键,姓名,性别,班级,出生年月)
创建教师表(教师编号主键,姓名,性别,出生年月,职称)
创建课程表(课程编号主键,课程名称,教师编号外键)
创建成绩表(学号外键,课程编号外键,成绩)
3.以上四个表格插入数据
4.满足以下需求
4.1查询Student表中的所有记录的Sname、Ssex和Class列。
4.3以班级降序查询学生表的所有记录。
4.4查询Score表中成绩在60到80之间的所有记录
4.5查询每门课的平均成绩
4.6查询课程编号为1的,并且成绩高60 有同学的记录。
4.7查询"男"教师及其所上的课程。
import pymysql
db = pymysql.connect(
host="localhost",
user="root",
password="wt222",
port=3306,
db="school",
charset="utf8"
)
cur = db.cursor()
'''
sql = """
create table if not exists student(
s_id int(20) primary key auto_increment,
s_name varchar(4),
s_sex varchar(2),
s_class int,
birthday datetime
);
"""
#执行sql语句
cur.execute(sql)
#提交数据
db.commit()
'''
'''
#创建游标对象---->负责执行sql语句
sql = """
insert into
student(s_name,s_sex,s_class,birthday)
values(%s,%s,%s,%s);
"""
list01 = [
('赵磊','男','一班',19990224),
('钱红','女','二班',20010811),
('王强','男','二班',20000920),
('李慧','女','四班',20020309),
('陈翔','男','三班',19930425),
('周久','男','五班',19981102),
('张欣','女','九班',20050306)
]
cur.executemany(sql,list01)
db.commit()
'''
#================================================================
'''
sql = """
create table if not exists teacher(
t_id int(20) primary key auto_increment,
t_name varchar(4),
t_sex varchar(2),
birthday date,
jobname varchar(10)
);
"""
cur.execute(sql)
db.commit()
'''
'''
sql = """
insert into teacher
(t_name,t_sex,birthday,jobname)
values(%s,%s,%s,%s);
"""
list02 = [
('李飞','男','1991-02-24','主任'),
('程伟丽','女','1977-08-11','秘书'),
('赵阳','男','1983-09-20','校长'),
('李慧珍','女','1995-03-09','处长'),
('陈浩','男','1993-04-25','老师'),
('周天宝','男','1999-11-02','组长'),
('张德明','男','2000-03-06','监察长')
]
cur.executemany(sql,list02)
db.commit()
'''
#===============================================
'''
sql = """
create table if not exists course(
c_id int(20) primary key auto_increment,
c_name varchar(20),
t_id int(20),
foreign key(t_id) references teacher(t_id)
);
"""
cur.execute(sql)
db.commit()
'''
'''
sql = """
insert into course
(c_id,c_name,t_id)
values(%s,%s,%s);
"""
list03 = [
('01','大学物理','1'),
('02','高分子材料化学','2'),
('03','计算机科学与技术','3'),
('04','通信工程','4'),
('05','生物科学技术','5'),
('06','大数据技术','6')
]
cur.executemany(sql,list03)
db.commit()
'''
#==========================================
'''
sql = """
create table if not exists sourse(
s_id int(20),
c_id int(20),
s_score int(3),
foreign key(s_id) references student(s_id),
foreign key(c_id) references course(c_id)
);
"""
cur.execute(sql)
db.commit()
'''
'''
sql = """
insert into sourse
(s_id,c_id,s_score)
values(%s,%s,%s);
"""
list04 = [
('1','01','88'),
('2','02','90'),
('3','03','55'),
('4','04','60'),
('5','05','79'),
('6','06','97')
]
cur.executemany(sql,list04)
db.commit()
'''
#==========================================
"""
sql = "select s_name,s_sex,s_class from student;"
a =cur.execute(sql)
a = cur.fetchall()
print(a)
'''
(('赵磊', '男', '一班'),
('钱红', '女', '二班'),
('王强', '男', '二班'),
('李慧', '女', '四班'),
('陈翔', '男', '三班'),
('周久', '男', '五班'),
('张欣', '女', '九班'))
'''
"""
"""
sql = "select * from student order by s_class desc;"
b =cur.execute(sql)
b = cur.fetchall()
print(b)
"""
sql = "select avg(s_score) from sourse;"
c =cur.execute(sql)
c = cur.fetchall()
print(c)