配置项链接数据库
pip install pymysql
安装pymysql
创建一个py文件,在里面进行编写
创建表
#导包
import pymysql
#连接数据库
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor() #调用
sql = """create table student(
sid int primary key auto_increment,
sname varchar(20) not null,
score float(3,1) default 0,
joindate date not null,
smid int,
foreign key(smid) references major(mid)
);"""
c1.execute(sql)
增加数据
# 对表中数据的操作会触发事务 insert update delete
# 提交事务 数据才会同步
import pymysql
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库面膜",database="数据库名",charset="utf8")
c1 = con.cursor()
sql = """insert into student values
(1001,"张大民",95.5,"2018-03-12",30),
(1002,"刘德华",93,"2017-09-18",10),
(1003,"刘能",87,"2018-09-12",50),
(1004,"范冰冰",89,"2016-11-20",10),
(1005,"周润发",75,"2017-06-30",10),
(1006,"郭靖",99.9,"2018-03-22",20),
(1007,"周立波",65,"2018-09-12",30),
(1008,"詹姆斯",59,"2015-12-09",50);"""
try:
c1.execute(sql)
# 当游标对象执行完sql语句之后,需要让数据库对象将事务进行提交
con.commit()
print("插入数据成功")
except:
# sql语句出现问题 事务进行回滚
con.rollback()
print("插入数据失败")
修改数据
import pymysql
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库面膜",database="数据库名",charset="utf8")
c1 = con.cursor()
# 修改詹姆斯的成绩为66
# 修改表中数据 触发事务
sql = """update student set score=66 where name='詹姆斯';"""
try:
# try里面存放可能会出现问题的代码
# 游标对象执行sql语句
c1.execute(sql)
# 数据库对象提交事务
con.commit()
print("修改成功")
except:
# 只要try中存放的代码有错误就会执行except里的代码
# sql语句出现问题 报错 让事务进行回滚
con.rollback()
print("修改失败")
删除数据
import pymysql
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor()
# 删除成绩低于80分的学生的信息
# 删除表中的数据 会触发事务
sql = """delete from student where score<80"""
try:
# 游标对象执行sql语句
c1.execute(sql)
# 让数据库对象提交事务
con.commit()
print("删除成功")
except:
# 如果sql发生错误 让事务进行回滚
con.rollback()
print("删除失败")
查询数据
# pymysql从表中查询数据,一定是有数据被返回
# 需要接收返回的数据
import pymysql
con = pymysql.connect(host="localhost",port=3306,user="root",password="数据库密码",database="数据库名",charset="utf8")
c1 = con.cursor()
sql = """select sname,score from student"""
ret = c1.execute(sql)
# 直接返回执行后的结果 得到数据的条数
print(ret)
# 获取具体的数据 从游标对象获取
# fetchone() 获取1条数据
# print(c1.fetchone())
for i in range(ret):
print(c1.fetchone())
# fetchmany(num)获取指定条数的数据
# 如果指定num 获取num条数据
# 如果不指定 获取1条数据
print(c1.fetchmany())
# fetchall() 获取所有返回的数据
print(c1.fetchall())
pymysql的封装
封装的思路
# 目的:封装一个模块
# 功能:可以快捷的操作mysql中的功能
# 分析:
确定单独的方法---(想要实现的功能)
确定公共的内容---(连接数据库、创建游标对象)
# 更进一步
初始化
pymysql使用之前
# 1. 先连接mysql,获取连接对象(数据库对象)
# 2. 通过连接对象,获取游标对象
具体的方法中如何执行
# 1. 直接执行
# 2. 先执行,再提交 (对数据进行增删改操作的时候,不仅仅是游标对象执行sql语句,连接对象还得向上提交才行)
封装的操作
可以封装到创建的某个py文件中,只需要导入就可以调用
sql语句可以通过调用方法时传参获取
# 创建表 #传参
def create(self,sql):
# 编写sql语句
#sql = """create table person(
#id int primary key auto_increment,
#name varchar(20) not null,
#gender enum("男","女","中性") default "男"
#);"""
# 让游标对象来执行sql语句
self.c1.execute(sql)
print("表创建成功")
# pymysql进行封装
# 创建表 插入数据 修改数据 删除数据 查询数据
import pymysql
class Mysql(object):
# 在创建对象时会执行 优先实例方法执行
def __init__(self):
try:
# 利用pymysql模块将python与mysql进行连接
self.con = pymysql.connect(host="localhost", port=3306, user="root", password="数据库密码", database="数据库名",
charset="utf8")
print("数据库连接成功")
except Exception as e:
# 如果try里面的语句出现问题会执行except语句 打印错误信息
print(e)
else:
# try执行完以后会执行else里面的语句
# 数据库对象创建游标对象 cursor()
self.c1 = self.con.cursor()
print("游标对象创建成功")
# 创建表
def create(self):
# 编写sql语句
sql = """create table person(
id int primary key auto_increment,
name varchar(20) not null,
gender enum("男","女","中性") default "男"
);"""
# 让游标对象来执行sql语句
self.c1.execute(sql)
print("表创建成功")
# 插入数据
def insert(self):
sql = """insert into person values
(1,"张三","男"),
(2,"李四","女"),
(3,"王五","中性")
"""
ret = self.c1.execute(sql)
# 如果sql语句执行成功 那么这里的ret肯定是有数据的
if ret:
# 让事务提交
self.con.commit()
print("插入数据成功")
else:
# 让事务回滚
self.con.rollback()
print("插入数据失败")
# 修改数据
def update(self):
# 修改王五的性别为男
sql = """update person set gender="男" where name='王五';"""
ret = self.c1.execute(sql)
if ret:
# sql语句执行成功,提交事务
self.con.commit()
print("修改成功")
else:
# sql语句执行失败,事务回滚
self.con.rollback()
print("修改失败")
# 删除数据
def delete(self):
# 王五
sql = """delete from person where name='王五';"""
ret = self.c1.execute(sql)
if ret:
# sql语句执行成功,事务提交
self.con.commit()
print("删除成功")
else:
# sql语句执行失败,事务回滚
self.con.rollback()
print("删除失败")
# 查询数据
def select(self):
# 查询表中所有的数据
sql = """select * from person"""
ret = self.c1.execute(sql)
# 统计数据的个数
# print(ret)
# 从游标对象获取所有的数据
# fetchone() 获取一条数据
# fetchmany(num) 获取指定num条数据,不指定num默认获取一条
# fetchall() 获取所有数据 将所有的数据存放在元组里返回
# print(self.c1.fetchall())
# 获取所有的数据 要求控制台中打印一行一个数据
for i in range(ret):
print(self.c1.fetchone())
# 给类实例化对象
mysql = Mysql()
# mysql.create()
# mysql.insert()
# mysql.update()
# mysql.delete()
mysql.select()
另一种封装
import pymysql
class Db:
def __init__(self) -> None:
self.conn = pymysql.connect(host='localhost',port=3306,user='root',
password='数据库密码',db='数据库名',cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.conn.cursor()
# 获取单个数据
def find(self,sql):
self.cursor.execute(sql)
res = self.cursor.fetchone()
return res
# 获取全部或者多条数据,以列表形式返回
def find_all(self,sql):
self.cursor.execute(sql)
res = self.cursor.fetchall()
return res
# 修改 删除 添加数据
def update(self,sql):
self.cursor.execute(sql)
# 提交
def commit(self):
self.conn.commit()
# 回滚
def rollback(self):
self.conn.rollback()
db = Db()