【前言】
为什么要使用Python操作mysql,在做自动化的时候,有时候会由于某种原因,使系统上存在很多脏数据,这就需要每次自动化脚本执行结束时,需要人为去数据库中清除数据,每次都手动执行过于麻烦,于是这里就引进Python3 操作mysql数据库的概念
【环境准备】
1.Python3.8
2.pycharm开发工具
3.安装Python依赖(通常选择第三方的连接器)
3.1.选择官方连接器 pip install mysql-connector-python(mysql的);
安装完成后,如何验证,在python中 import mysql.connector 不报错即可
选择官方连接器 pip install mariadb(mariadb的);
安装完成后,如何验证,在python中 import mariadb不报错即可
3.2. 第三方连接器 (既支持mysql,也支持mariadb)
mysqlclient Python+C语言实现的
pip intsall mysqlclient 安装; 如何验证 import Mysqldb 不报错即可
PyMysql 纯Python语言实现的
pip install pymysqll; 如何验证 import pymysql
4.mysql库(如何安装https://www.cnblogs.com/xinhua19/p/12750611.html)
【数据库查询】
【建立连接】
代码示例 import pymysql pymysql.connect( host='localhost',user='user','password='password',database='database',port=3306 )
from pymysql import connect, Error """使用pymysql连接数据库""" conn = None # 数据库的连接对象 try: # 建立连接 conn = connect( host=10.100.12.1, port=3306, user=useradmin, password=123456, database='test_data_1' ) # 获取游标对象 cursor = conn.cursor() # 执行sql命令(增删改查) select * from table; # 关闭游标对象 cursor.close() # 关闭数据库连接 conn.close() """但是我们有时候经常会忘记去关闭数据库,我们可以通过except finaly去操作,代码如下""" except Error as e: print('连接失败:{}‘.format(e)) finally try # 再次关闭连接 conn.close() print('数据库连接已关闭')
【with语法】
with语法(pymysql 还提供了1个with语法)
自动回收数据库连接
自动回收游标
1 from pymysql import connect, Error 2 3 """使用pymysql连接数据库""" 4 5 conn = None # 数据库的连接对象 6 7 try: 8 # 建立连接 9 conn = connect( 10 host=10.100.12.1, 11 port=3306, 12 user=useradmin, 13 password=123456, 14 database='test_data_1' 15 ) 16 with conn: 17 with conn,cursor() as cursor: 18 sql = 'select * from table limit 1;' 19 # 执行sql 20 cursor.execute(sql) 21 #方法一 获取全部查询结果 22 for item in sql: 23 print (item) 24 #方法二 获取一条数据 25 onedata = cursor.fetchone() 26 print(onedata) 27 # 方法三 获取全部数据 28 all_data = cursor.fetchall() 29 for item in all_data : 30 print (item) 31 # 方法四 获取指定数据 32 data_list = cursor.fetchmany(10) 33 for item in data_list : 34 print (item) 35 except Error as e: 36 print('连接失败:{}‘.format(e)) 37
【游标提供的方法】
获取一条数据
cursor.fetchone()
获取全部数据
cursor.fetchall()
获取指定数量的数据
cursor.fetchmany(10)
【结果转换为字典】
需要添加连接参数cursorclass
1 代码示例 2 3 4 import pymysql 5 from pymysql.cursors import DictCursor 6 7 pymysql.connect( 8 host='localhost',user='user','password='password',database='database',port=3306, cursorclass=DictCursor 9 )
【修改数据】
修改数据库,最终于被人遗漏的步骤是什么? 是提交事务操作
- 从数据库连接对象获取游标
- 执行修改SQL的语句
- 提交事务
- 关闭游标,关闭数据库连接
from pymysql import connect, Error """使用pymysql连接数据库""" conn = None # 数据库的连接对象 try: # 建立连接 conn = connect( host=10.100.12.1, port=3306, user=useradmin, password=123456, database='test_data_1' ) with conn: with conn,cursor() as cursor: sql = 'update 语句;' # 执行sql cursor.execute(sql) # 提交事务 conn.commit() except Error as e: print('连接失败:{}‘.format(e))
【新增数据】
步骤和修改数据库一样。都是4个步骤,也都需要提交事务。
这边不同的是插入单个数据可以写1个insert into ; 那么如果想写多条数据时 该怎么处理呢,这边就引入了
【批量插入数据】
cursor.exectemany(sql.args) 参数解释:sql:需要执行的sql语句,args:需要插入的数据序列(通常用列表/元组表示)
【事务的提交和回滚】
1 代码示例 2 3 try 4 cursor.execute(sql1, args) 5 conn.begin() # 开始事务 6 cursor.execute(sql2, args) 7 cursor.execute(sql3, args) 8 cursor.close() 9 conn.commit() 10 except Exception: 11 12 conn.rollback() # 回滚事务
【删除数据】
删除数据和 修改数据,新增数据是一样的,都是四步
代码示例 def delete _data(self): """删除数据""" row_id = 47 sql = "delete from table where id like = %s" with self.conn.cursor() as cursor: cursor.excute(sql,(row_id, )) self.conn.commit()