Pandas操作MySQL的方法详解

2022-08-23 11:07:44
目录
本地数据库操作MySQL连接MySQL执行sql查询语句游标使用转成DataFrame保存成CSV数据SQL插入数据执行SQL删除语句使用sqlalchemy连接数据库查询语句1查询语句2写入数据使用read_sql读取

本文介绍的是如何使用Pandas来操作MySQL数据库。主要是包含查询MySQL中的数据,以及如何往数据库中写入数据。

先安装两个库:

    pymysqlsqlalchemy
    pip install pymysql
    pip install sqlalchemy
    

    本地数据库

    查看一个本地数据库中某个表的数据。这份数据是《MySQL经典50题》的一个表之一:

    部分习题答案:

    mysql -u root -p   -- 安装mysql,进入数据库输入暗文密码
    
    show databases;  -- 显示全部数据库
    use test;  -- 使用某个数据库
    show tables;  -- 查看数据库下的全部表
    select * from Student;  -- 查看某个表的全部内容
    

    操作MySQL

    连接MySQL

    以pymysql模块为例,讲解如何连接数据库。

    In>

    import pandas as pd
    
    import pymysql
    from sqlalchemy import create_engine
    

    In [2]:

    connection = pymysql.connect(
      host='127.0.0.1',  # 本机ip地址
      port=3306,  # mysql默认端口号
      user="root",  # 用户名
      password="password",  # 密码
      charset="utf8", # 字符集
      db="test"  # 数据库
    )
    
    cur = connection.cursor() # 建立游标
    cur
    

    Out[2]:

    <pymysql.cursors.Cursor at 0x11ddc1190>

    connect()方法常用的参数:

    connect() 常用参数说明
    host主机ip
    user用户名
    password密码
    database数据库
    port端口号
    charset字符集

    调用 cursor() 方法即可返回一个新的游标对象,在连接没有关闭之前,游标对象可以反复使用

    执行sql查询语句

    In>

    sql="""  # 待执行的sql语句
    select * from Student;
    """
    
    # 执行sql语句
    cur.execute(sql)  
    

    Out[3]:

    8

    In [4]:

    cur
    

    结果表明是个游标对象:

    Out[4]:

    <pymysql.cursors.Cursor at 0x11ddc1190>

    In [5]:

    cur.description
    

    主要返回游标的属性信息,官网的描述为:

    Out[5]:

    (('s_id', 253, None, 20, 20, 0, False),
     ('s_name', 253, None, 20, 20, 0, True),
     ('s_birth', 253, None, 20, 20, 0, True),
     ('s_sex', 253, None, 20, 20, 0, True))

    In [6]:

    # 列名
    columns = [col[0] for col in  cur.description]
    columns
    

    Out[6]:

    ['s_id', 's_name', 's_birth', 's_sex']

    游标使用

    下图显示的是如何取出一条或者多条数据(按照顺序查询)

    通过游标获取全部的数据:

    fetch相关的函数都是获取结果集中剩下的数据,多次调用的时候只会从剩余数据中查询:

    当第二次调用的时候结果就是空集。

    通过游标获取查询的结果集的特点:

    1.可以获取1条、多条和全部数据

    2.在获取数据的时候是按照顺序读取的

    3.fetchall函数返回剩下的所有行

      如果是末尾,则返回空元组;否则返回一个元组,其元素是每一行的记录封装的一个元组

      转成DataFrame

      # 列名
      columns = [col[0] for col in  cur.description]
      
      # 数据集合
      data = []
      for i in cur.fetchall():
          data.append(i)
          
      df = pd.DataFrame(data,columns=columns)
      

      保存成CSV数据

      SQL插入数据

      往MySQL数据库中插入数据:

      import pandas as pd
      
      import pymysql
      from sqlalchemy import create_engine
      
      connection = pymysql.connect(
        host='127.0.0.1',  # 本机ip地址
        port=3306,  # mysql默认端口号
        user="root",  # 用户名
        password="11112222",  # 密码
        charset="utf8", # 字符集
        db="test"  # 数据库
      )
      
      cur = connection.cursor() # 建立游标
      
      # 待执行SQL语句
      sql="""  
      insert into test.Student(s_id, s_name, s_birth, s_sex) values("09","吴越","1998-08-08","男")
      """
      
      # 执行sql语句
      cur.execute(sql)  
      

      很关键一步,要记得提交,这样最终才会写入数据库:

      connection.commit()
      

      执行SQL删除语句

      使用完之后记得关闭连接:

      connection.close()
      

      使用sqlalchemy

      第二种常用的方法是通过sqlalchemy来连接数据库:

      连接数据库

      import pandas as pd
      from sqlalchemy import create_engine
      
      # 依次填写MySQL的用户名、密码、IP地址、端口、数据库名
      # create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库",其他参数)
      engine = create_engine("mysql+pymysql://root:password@localhost:3306/test")
      

      查询语句1

      查询语句2

      写入数据

      Pandas中的DataFrame写入新的表testdf中:

      show tables;
      

      使用read_sql读取

      使用Pandas自带的read_sql函数能够自行读取数据,读取上面创建的数据.

      官网:https://pandas.pydata.org/docs/reference/api/pandas.read_sql.html

      import pandas as pd
      from sqlalchemy import create_engine
      
      # 依次填写MySQL的用户名、密码、IP地址、端口、数据库名
      engine = create_engine("mysql+pymysql://root:password@localhost:3306/test")
      # sql语句
      sql4 = "select * from testdf;"
      df4 = pd.read_sql(sql4, engine)
      

      到此这篇关于Pandas操作MySQL的方法详解的文章就介绍到这了,更多相关Pandas操作MySQL内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!