python操作数据库的过程:
创建连接—获取游标—执行命令—关闭游标—关闭连接
python访问mysql 要用pymysql库
pymysql需要安装:pip install pymysql
安装完之后导入pymysql,创建连接
连接数据库的参数按照实际情况添加,端口号默认是3306,我的有冲突,改成了3307
# 导入pymysqlimport pymysql
# 定义一个函数# 这个函数用来创建连接(连接数据库用)defmysql_db():# 连接数据库肯定需要一些参数
conn = pymysql.connect(
host="127.0.0.1",
port=3307,
database="lebo",
charset="utf8",
user="root",
passwd="root")if __name__ =='__main__':
mysql_db()
关于游标,执行SQL,查询数据
游标需要创建游标还要关闭游标,为了防止忘关游标,所以用with
# 打开数据库可能会有风险,所以添加异常捕捉try:with conn.cursor()as cursor:# 准备SQL语句
sql ="select * from user"# 执行SQL语句
cursor.execute(sql)# 执行完SQL语句后的返回结果都是保存在cursor中# 所以要从cursor中获取全部数据
datas = cursor.fetchall()print("获取的数据:\n", datas)except Exception as e:print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接
conn.close()
cursor中获取数据的fetchall,fetchone,fetchmany
fetchall:获取当前SQL语句能查出来的全部数据
fetchone:每次获取一条数据。但是获取到这条数据后,指针会往后移一行数据
fetchmany:直接告诉它想要多少条数据
插入一条数据
重点一个是commit,一个是rollback。有提交的地方一定要有回滚。回滚到上次提交的地方
try:with conn.cursor()as cursor:# 准备SQL语句
value ="12,'鲁肃'"
sql =f"insert into user values ({value});"# 执行SQL语句
cursor.execute(sql)# 执行完要提交
conn.commit()print("提交成功")except Exception as e:# 如果执行失败要回滚
conn.rollback()print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接
conn.close()
添加多条数据
try:with conn.cursor()as cursor:# 准备要插入的数据# 插入一条# value = "12,'鲁肃'"# 插入多条
value ="(13,'张三'),(14,'李四'),(15,'王五')"# 准备SQL语句
sql =f"insert into user values {value};"# 执行SQL语句
cursor.execute(sql)# 执行完要提交
conn.commit()print("提交成功")except Exception as e:# 如果执行失败要回滚
conn.rollback()print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接
conn.close()
表中可以看到已经插入成功
修改、更新数据
只需要修改添加的SQL语句,其他不变
增删改查,除了查询,其他都需要提交
try:with conn.cursor()as cursor:# 准备SQL语句
sql =f"update user set name='封控了' where id = 1 ;"# 执行SQL语句
cursor.execute(sql)# 执行完要提交
conn.commit()print("提交成功")except Exception as e:# 如果执行失败要回滚
conn.rollback()print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接
conn.close()
删除数据
try:with conn.cursor()as cursor:# 准备SQL语句
sql ="delete from user where id = 12;"# 执行SQL语句
cursor.execute(sql)# 执行完要提交
conn.commit()print("删除成功")except Exception as e:# 如果执行失败要回滚
conn.rollback()print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接
conn.close()
封装一个需要自己写SQL语句的mysql工具类
'''
封装一个mysql工具类(需要自己写SQL语句)
功能:mysql数据库操作
步骤:
1.连接数据库
2.通过连接对象,获取游标对象
3.增删改查操作
方法:
1.查
2.增删改 commit,rollback
'''# 先要导入pymysqlimport pymysql
# 把连接参数定义成字典
config ={"host":"127.0.0.1","port":3307,"database":"lebo","charset":"utf8","user":"root","passwd":"root"}classMysqldb():# 初始化方法def__init__(self):# 初始化方法中调用连接数据库的方法
self.conn = self.get_conn()# 调用获取游标的方法
self.cursor = self.get_cursor()# 连接数据库的方法defget_conn(self):# **config代表不定长参数
conn = pymysql.connect(**config)return conn
# 获取游标defget_cursor(self):
cursor = self.conn.cursor()return cursor
# 查询sql语句返回的所有数据defselect_all(self, sql):
self.cursor.execute(sql)return self.cursor.fetchall()# 查询sql语句返回的一条数据defselect_one(self, sql):
self.cursor.execute(sql)return self.cursor.fetchone()# 查询sql语句返回的几条数据defselect_many(self, sql, num):
self.cursor.execute(sql)return self.cursor.fetchmany(num)# 增删改除了SQL语句不一样其他都是一样的,都需要提交defcommit_data(self, sql):try:# 执行语句
self.cursor.execute(sql)# 提交
self.conn.commit()print("提交成功")except Exception as e:print("提交出错\n:", e)# 如果出错要回滚
self.conn.rollback()# 当对象被销毁时,游标要关闭,连接也要关闭# 创建时是先创建连接后创建游标,关闭时是先关闭游标后关闭连接def__del__(self):
self.cursor.close()
self.conn.close()
调用
# 已经封装好mysql类了,就不用导入pymsql了,直接导入封装好的类from mysql_util import Mysqldb
# 实例化
my_db = Mysqldb()# 写查询SQL语句
sql ="select * from user where id>5"# 查询所有
select_all = my_db.select_all(sql)print("查询所有数据:\n", select_all)# 查询一条
select_one = my_db.select_one(sql)print("查询一条数据:\n", select_one)# 查询多条
select_many = my_db.select_many(sql,3)print("查询3条数据:\n", select_many)# 新增一条数据
value =(16,'BBQ')
sql =f"insert into user values {value}"
insert_one = my_db.commit_data(sql)# 新增多条数据
values ="(17, 'aaa'), (18, 'bbb'), (19, 'ccc')"
sql =f"insert into user values {values}"
insert_many = my_db.commit_data(sql)# 修改数据
sql ="update user set name = '出不去了' where id = 17"
my_db.commit_data(sql)# 删除数据
sql ="delete from user where id = 17"
my_db.commit_data(sql)
封装一个不用写SQL语句,只需要填参数的工具类
只写了基本的增删改查,后面可以根据实际情况添加
import pymysql
classDatabase():# **config是指连接数据库时需要的参数,这样只要参数传入正确,连哪个数据库都可以# 初始化时就连接数据库def__init__(self,**config):try:# 连接数据库的参数我不希望别人可以动,所以设置私有
self.__conn = pymysql.connect(**config)
self.__cursor = self.__conn.cursor()except Exception as e:print("数据库连接失败:\n", e)# 查询一条数据# 参数:表名table_name,条件factor_str,要查询的字段field 默认是查询所有字段*defselect_one(self, table_name, factor_str='', field="*"):if factor_str =='':
sql =f"select {field} from {table_name}"else:
sql =f"select {field} from {table_name} where {factor_str}"
self.__cursor.execute(sql)return self.__cursor.fetchone()# 查询多条数据# 参数:要查询数据的条数num,表名table_name,条件factor_str,要查询的字段field 默认是查询所有字段*defselect_many(self, num, table_name, factor_str='', field="*"):if factor_str =='':
sql =f"select {field} from {table_name}"else:
sql =f"select {field} from {table_name} where {factor_str}"
self.__cursor.execute(sql)return self.__cursor.fetchmany(num)# 查询全部数据# 参数:表名table_name,条件factor_str,要查询的字段field 默认是查询所有字段*defselect_all(self, table_name, factor_str='', field="*"):if factor_str =='':
sql =f"select {field} from {table_name}"else:
sql =f"select {field} from {table_name} where {factor_str}"
self.__cursor.execute(sql)return self.__cursor.fetchall()# 新增数据definsert(self,table_name, value):
sql =f"insert into {table_name} values {value}"try:
self.__cursor.execute(sql)
self.__conn.commit()print("插入成功")except Exception as e:print("插入失败\n", e)
self.__conn.rollback()# 修改数据# 参数:表名,set值(可能是一个,也可能是多个,所以用字典),条件defupdate(self, table_name, val_obl,change_str):
sql =f"update {table_name} set"# set后面应该是要修改的字段,但是可能会修改多个字段的值,所以遍历一下# key对应字段的名,val对应字段的值for key, val in val_obl.items():
sql +=f" {key} = {val},"# 遍历完的最后面会有一个逗号,所以给它切掉,然后再拼接条件# !!!空格很重要
sql = sql[:-1]+" where "+change_str
try:
self.__cursor.execute(sql)
self.__conn.commit()print("修改成功")except Exception as e:print("修改失败\n", e)
self.__conn.rollback()# 删除数据defdelete(self,table_name, item):
sql =f"delete from {table_name} where {item}"try:
self.__cursor.execute(sql)
self.__conn.commit()print("删除成功")except Exception as e:print("删除失败\n", e)
self.__conn.rollback()
引用 ↓
# 导包from mysql_normal_util import Database
# 设置连接数据库的参数
config ={"host":"127.0.0.1","port":3307,"database":"lebo","charset":"utf8","user":"root","passwd":"root"}# 实例化时就直接传参数
db = Database(**config)# 查询1条
select_one = db.select_one("user")print(select_one)# 查询多条
select_many = db.select_many(3,"user")print(select_many)# 查询所有数据(根据条件)
select_all = db.select_all("user","id>10")print(select_all)# 新增一条数据
db.insert("user","(20,'111')")# 新增多条数据
db.insert("user","(21,'123'),(22,'456')")# 修改一个字段的数据
db.update("user",{"name":"222"},"id=20")# 修改多个字段的数据
db.update("user",{"id":"23","name":"12345"},"id=103")# 删除数据
db.delete("user","id=23")
版权归原作者 是佳佳呀~ 所有, 如有侵权,请联系我们删除。