zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    利用Abot爬虫和visjs 呈现漫威宇宙
    Abot 爬虫分析-整体结构
    利用Abot 抓取博客园新闻数据
    sftp配置多个用户权限的问题
    十三、Vue中的computed属性
    十二、react-reudx之@connect 摆脱redux的繁琐操作
    十一、微信小程序-var、let、const用法详解
    十、es6之扩展运算符 三个点(...)
    九、小程序 Redux详解与在小程序中怎么使用(action和reducers)
    八、wepy代码规范
  • 原文地址:https://www.cnblogs.com/xinhua19/p/15037164.html
Copyright © 2011-2022 走看看