当前位置:   article > 正文

Python操作mysql数据库_pymysql

pymysql

一、数据库分类

关系型数据库:采用了关系模型来组织数据的数据库,如MySQL、PostgreSQL、Oracle数据库。

非关系型数据库:以键值对存储,且结构不固定,可以减少一些时间和空间的开销,如MongoDB、Redis。

二、Python操作MySQL环境安装

1、Docker部署MySQL:

1)创建数据库目录(略)

mkdir -p /opt/mysql/data

2)创建并运行MySQL容器

# -d 守护进程后台运行# -v 目录映射——挂载;作用是为了持久化# -e 环境变量# root用户密码设置为hl# -p 映射端口 端口默认3306# root账号的密码为hldocker run -d --name mysql -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hl -p 3306:3306 registry.cn-hangzhou.aliyuncs.com/sqqdcl/waimai-db

如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.clickicon-default.png?t=N5K3https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

2、安装pymysql库

#python访问MySQL,需要安装pymysql库pip install pymysql

3、Navicat配置连接数据库

三、Python操作MySQL

Python操作数据库的过程:创建连接->获取游标->执行命令->关闭游标->关闭连接

1、创建连接,连接数据库的参数按照实际情况添加

​​

  1. import pymysql
  2. #定义一个函数,用来创建连接数据库
  3. def mysql_db():
  4. con = pymysql.connect(
  5. host='192.168.223.130',
  6. port=3306,
  7. database='mysql',
  8. charset='utf8',
  9. user='root',
  10. password='hl'
  11. )
  12. if __name__ == '__main__':
  13. mysql_db()

2、获取游标,执行Sql,查询操作

  1. import pymysql
  2. #定义一个函数,用来操作数据库
  3. def mysql_db():
  4. con = pymysql.connect(
  5. host='192.168.223.130',
  6. port=3306,
  7. database='mysql',
  8. charset='utf8',
  9. user='root',
  10. password='hl'
  11. )
  12. try:
  13. with con.cursor() as cursor:
  14. #一、查询
  15. sql = "select * from tables_priv;"
  16. #执行SQL语句
  17. #执行后的结果都保存在cursor中
  18. cursor.execute(sql)
  19. #1-从cursor中获取全部数据用fetchall
  20. # datas = cursor.fetchall()
  21. # print("获取的数据:\n",datas)
  22. #2-从cursor中获取一条数据用fetchall
  23. # data = cursor.fetchone()
  24. # print("获取的数据:\n",data)
  25. #3-想要从cursor中获取几条数据用fetchmany
  26. datas = cursor.fetchmany(3)
  27. print("获取的数据:\n",datas)
  28. except Exception as e:
  29. print("数据库异常:\n",e)
  30. finally:
  31. #不管成功还是失败,都要关闭数据库连接
  32. con.close()
  33. if __name__ == '__main__':
  34. mysql_db()

2.1、fetchall:获取当前SQL语句能查出来的全部数据,元组套元组;

2.2、fetchone:每次获取一条数据。但是获取到这条数据后,指针会往后移一行数据,返回一个元组;

2.3、fetchmany:直接告诉它想要多少条数据。

3、插入数据操作

3.1、插入一条数据

说明:除了查询,其他操作都需要commit;commit对应rollback,回滚到上次提交的地方。​​​​​​​

  1. import pymysql
  2. #定义一个函数,用来操作数据库
  3. def mysql_db():
  4. con = pymysql.connect(
  5. host='192.168.223.130',
  6. port=3306,
  7. database='mysql',
  8. charset='utf8',
  9. user='root',
  10. password='hl'
  11. )
  12. try:
  13. with con.cursor() as cursor:
  14. # 二、插入
  15. #1-插入一条数据
  16. sql = "insert into help_category(help_category_id, name, parent_category_id, url)value(900,'hl-test01',0,'');"
  17. #执行SQL语句
  18. cursor.execute(sql)
  19. #执行玩SQL语句要提交
  20. con.commit()
  21. print("提交成功")
  22. except Exception as e:
  23. # 如果执行失败要回滚
  24. con.rollback()
  25. print("数据库异常:\n",e)
  26. finally:
  27. #不管成功还是失败,都要关闭数据库连接
  28. con.close()
  29. if __name__ == '__main__':
  30. mysql_db()

插入结果如下:

3.2、插入多条数据​​​​​​​

  1. try:
  2. with con.cursor() as cursor:
  3. # 二、插入
  4. #1-插入一条数据
  5. # sql = "insert into help_category(help_category_id, name, parent_category_id, url)values(900,'hl-test01',0,'');"
  6. # 2-插入多条数据
  7. value = "(901,'hl-test02',0,''),(902,'hl-test03',0,''),(903,'hl-test04',0,'')"
  8. # sql = f"insert into help_category(help_category_id, name, parent_category_id, url) values {value};"
  9. sql = f"insert into help_category values {value};"
  10. #执行SQL语句
  11. cursor.execute(sql)
  12. #执行玩SQL语句要提交
  13. con.commit()
  14. print("提交成功")
  15. except Exception as e:
  16. # 如果执行失败要回滚
  17. con.rollback()
  18. print("数据库异常:\n",e)
  19. finally:
  20. #不管成功还是失败,都要关闭数据库连接
  21. con.close()

4、更新数据

  1. try:
  2. with con.cursor() as cursor:
  3. #三、更新
  4. sql = f"update help_category set name='HL-Update' where help_category_id=900;"
  5. #执行SQL语句
  6. cursor.execute(sql)
  7. #执行完SQL语句要提交
  8. con.commit()
  9. print("提交成功")
  10. except Exception as e:
  11. # 如果执行失败要回滚
  12. con.rollback()
  13. print("数据库异常:\n",e)
  14. finally:
  15. #不管成功还是失败,都要关闭数据库连接
  16. con.close()

5、删除数据

  1. import pymysql
  2. #定义一个函数,用来操作数据库
  3. def mysql_db():
  4. con = pymysql.connect(
  5. host='192.168.223.130',
  6. port=3306,
  7. database='mysql',
  8. charset='utf8',
  9. user='root',
  10. password='hl'
  11. )
  12. try:
  13. with con.cursor() as cursor:
  14. #一、查询
  15. # sql = "select * from tables_priv;"
  16. #执行SQL语句
  17. #执行后的结果都保存在cursor中
  18. # cursor.execute(sql)
  19. #1-从cursor中获取全部数据用fetchall
  20. # datas = cursor.fetchall()
  21. # print("获取的数据:\n",datas)
  22. #2-从cursor中获取一条数据用fetchall
  23. # data = cursor.fetchone()
  24. # print("获取的数据:\n",data)
  25. #3-想要从cursor中获取几条数据用fetchmany
  26. # datas = cursor.fetchmany(1)
  27. # print("获取的数据:\n",datas)
  28. # 二、插入
  29. #1-插入一条数据
  30. # sql = "insert into help_category(help_category_id, name, parent_category_id, url)values(900,'hl-test01',0,'');"
  31. # 2-插入多条数据
  32. # value = "(901,'hl-test02',0,''),(902,'hl-test03',0,''),(903,'hl-test04',0,'')"
  33. # sql = f"insert into help_category values {value};"
  34. #三、更新
  35. # sql = f"update help_category set name='HL-Update' where help_category_id=900;"
  36. #四、删除
  37. sql = "delete from help_category where help_category_id like '90%';"
  38. #执行SQL语句
  39. cursor.execute(sql)
  40. #执行完SQL语句要提交
  41. con.commit()
  42. print("提交成功")
  43. except Exception as e:
  44. # 如果执行失败要回滚
  45. con.rollback()
  46. print("数据库异常:\n",e)
  47. finally:
  48. #不管成功还是失败,都要关闭数据库连接
  49. con.close()
  50. if __name__ == '__main__':
  51. mysql_db()

四、Python封装mysql数据库

1、将连接数据的参数写入mysqlConfig.py

  1. class MysqlConfig:
  2. HOST = '192.168.223.130'
  3. PORT = 3306
  4. USER = 'root'
  5. PASSWORD = 'hl'
  6. DB = 'mysql'
  7. CHARSET = 'utf8'

2、封装数据库的增删改查操作

  1. import pymysql
  2. from mysqlConfig import MysqlConfig
  3. class MysqlConnection:
  4. def __init__(self,host=MysqlConfig.HOST,
  5. port=MysqlConfig.PORT,
  6. user=MysqlConfig.USER,
  7. pwd=MysqlConfig.PASSWORD,
  8. db=MysqlConfig.DB):
  9. self.db = pymysql.connect(host=host,
  10. port=port,
  11. user=user,
  12. password=pwd,
  13. database=db,
  14. charset=MysqlConfig.CHARSET)#创建连接
  15. self.cursor = self.db.cursor()#创建游标
  16. #查询方法
  17. def query(self,sql,many=True):
  18. try:
  19. self.cursor.execute(sql)#执行SQL语句
  20. if many:
  21. res = self.cursor.fetchall()
  22. else:
  23. res = self.cursor.fetchone()
  24. return res
  25. except Exception as e:
  26. raise e#打印日志
  27. #增删改方法
  28. def __do(self,sql):
  29. try:
  30. self.cursor.execute(sql)#执行SQL语句
  31. except Exception as e:
  32. self.db.rollback()#如果执行失败要回滚
  33. #打日志
  34. raise e
  35. else:
  36. self.db.commit()#提交
  37. def update(self,sql):
  38. self.__do(sql)
  39. def insert(self,sql):
  40. self.__do(sql)
  41. def delete(self,sql):
  42. self.__do(sql)
  43. def exit(self):
  44. self.cursor.close()#关闭游标
  45. self.db.close()#关闭数据库
  46. if __name__ == '__main__':
  47. db = MysqlConnection()
  48. res = db.query('select * from tables_priv;')
  49. print(res)
  50. db.exit()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/382205
推荐阅读
相关标签
  

闽ICP备14008679号