Python与Mysql数据库(学习笔记)

Python与Mysql数据库

1.安装pymsql

命令提示符使用以下命令安装pymysql

pip install pymysql

在这里插入图片描述

使用pip list出现下面表示安装成功
Python与Mysql数据库(学习笔记)_第1张图片

2.连接MySQL

“”"

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"
)

3.cursor游标对象

定义

它负责执行我们熟悉的SQL语句

开启游标

# 开启mysql的游标功能,创建一个游标对象;              
cursor = db.cursor()

常用方法

方法 功能
execute(query, args) 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数;
executemany(query, args) 执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数

区别是:批量添加的时候executemany比较快

cursor用来查询数据的方法

我们执行完sql语句怎么查询返回的受影响的函数呢,有以下及格方法

方法 功能
fetchone() 返回一条结果行
fetchmany(size) 接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据
fetchall() 接收全部的返回结果行

4.操作数据库

数据库常用方法

增加

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条数据

Python操作数据库

创建数据库表

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用查询语句
Python与Mysql数据库(学习笔记)_第2张图片
出现表结构类型图,说明创建成功

插入数据

#创建游标对象---->负责执行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()

Python与Mysql数据库(学习笔记)_第3张图片
出现表数据结构说明成功

在python中的

查询方法

# 开启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)

你可能感兴趣的:(笔记,python模块,mysql,数据库,python)