Python操作Mysql

【前言】

为什么要使用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  )  

 【修改数据】

修改数据库,最终于被人遗漏的步骤是什么?   是提交事务操作

  1. 从数据库连接对象获取游标
  2. 执行修改SQL的语句
  3. 提交事务
  4. 关闭游标,关闭数据库连接
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()

 

posted @ 2021-07-20 23:20  xinhua  阅读(1454)  评论(0编辑  收藏  举报