zoukankan      html  css  js  c++  java
  • Python 运用pymysql+pandas 完成连接 MySQL 数据库读

    pymysql库连接

    pandas读

    # pymysql 是在 python3.x 版本中用于连接 MySql 服务器的一个库
    # 1.创建一个连接对象
    # host mysql 服务器地址
    # port 数字类型 端口
    # user 用户名
    # passwd 密码
    # db 数据库名称
    # charset 连接编码,需要显示指明编码方式
    
    # 2.获取游标
    # 游标是什么?
    # 简述:游标(cursor)是一个游动的标识,可以理解成一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行
    
    # 3.执行增删改查的操作
    # 4.处理数据
    # 5.关闭cursor
    # 6.关闭connection
    import pymysql
    import pandas as pd
    # 创建一个连接对象,打开数据库连接
    conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='密码',db='数据库名',charset='utf8')
    # 获取游标
    cursor=conn.cursor()
    # 创建一个字符串语句,字符串支持换行
    sql = """
        select * from football.player
    """
    cursor.execute(sql)
    data1=cursor.fetchall()
    df1=pd.DataFrame(list(data1),columns=['id','name','club_id','country_id','position_id','history_club_id','active'])
    
    print(df1)
    
    cursor.close()
    conn.close()

    2.其他方法

    方法描述
    begin() 开启事务
    commit() 提交事务
    cursor(cursor=None) 创建一个游标用来执行语句
    ping(reconnect=True) 检查连接是否存活,会重新发起连接
    rollback() 回滚事务
    close() 关闭连接
    select_db(db) 选择数据库
    show_warnings() 查看warning信息

    3.获取cursor对象

       1.游标对象,用于执行查询和获取结果

       2.核心方法

    方法名说明
    execute() 用于执行一个数据库的查询命令
    fetchone() 获取结果集中的下一行
    fetchmany(size) 获取结果集中的下(size)行
    fetchall() 获取结果集中剩下的所有行
    rowcount 最近一次execute返回数据/影响的行数
    close() 关闭游标

     

    4.举个栗子

    # 执行查询功能
    with connection.cursor() as cursor:
        sql = 'select * from home_user'
        cursor.execute(sql)
        results = cursor.fetchall()
        connection.commit()
        for results in results:
            uid = results[0]
            name = results[1]
            password = results[2]
            print('==========用户信息===============')
            print('用户id: {id} 
    用户名: {name}
    密码: {pwd}'.format(id=uid, name=name, pwd=password))

    5.详细

    方法描述
    close() 关闭游标。
    execute(query, args=None) 执行单条语句,传入需要执行的语句,是string类型;同时可以给查询传入参数,参数可以是tuple、list或dict。执行完成后,会返回执行语句的影响行数,如果有的话。
    executemany(query, args) 执行多条INSERT语句,传入需要执行的语句;同时可以给查询传入参数,参数是一个mappings序列。执行完成后,会返回执行语句的影响行数,如果有的话。
    fetchone() 获取下一行数据。
    fetchall() 获取所有数据。
    fetchmany(size=None) 获取几行数据。
    read_next() 获取下一行数据。
    callproc() 用来调用存储过程。
    mogrify() 参数化查询,防止SQL注入。
    scroll(num,mode) 移动游标位置。

    6.基本操作

    查询数据

    # 1.分页查询操作
    def find_by_page(page, size):
        with pymysql.connect(host=HOST,
                             port=PORT,
                             user=USER,
                             passwd=PASSWORD,
                             charset=CHARSET,
                             db=DB_NAME) as cursor:
            sql = "SELECT * FROM t_addr LIMIT{},{}".format((page - 1) * size, size)
            cursor.execute(sql)
            user = cursor.fetchall()

    事务操作

    conn = pymysql.connect(
        host='10.10.0.109',
        port=3306,
        user='mha',
        password='123456',
        database='sbtest',
        charset='utf8'
    )
    
    cursor = conn.cursor()
    
    # 插入sql;
    sql_insert = "insert into t_user (userid,username) values (10,'user10')"
    # 更新sql;
    sql_update = "update t_user set username = 'name91' where userid=9"
    # 删除sql;
    sql_delete = "delete from t_user where userid < 3"
    
    # 把一个事务放到一个try块里,如果出现异常就回滚;
    try:
        # 开启事务;
        conn.begin()
    
        cursor.execute(sql_insert)
        print(cursor.rowcount)
    
        cursor.execute(sql_update)
        print(cursor.rowcount)
    
        cursor.execute(sql_delete)
        print(cursor.rowcount)
    
        # 提交事务;
        conn.commit()
    
    except Exception as e:
        # 若有异常就回滚;
        conn.rollback()
    
    cursor.close()
    conn.close()

    批量插入

    # 测试事务 批量添加
    def test_batch_insert():
        conn = pymysql.connect(host=HOST,
                               port=PORT,
                               user=USER,
                               passwd=PASSWORD,
                               charset=CHARSET,
                               db=DB_NAME)
        cursor = conn.cursor()
        try:
            sql = 'INSERT INTO t_addr(PROVICE, CITY, COUNTY, DEATIL, USERID) VALUES (%s,%s,%s,%s,%s)'
            li = []
            for i in range(50):
                li.append(('湖北省', '武汉市', '高新区' + str(i), '智慧园2135', 6))
            # 开启事物
            conn.begin()
            cursor.executemany(sql, li)
            # 提交
            conn.commit()
        except Exception as e:
            conn.rollback()
            print(e)
            # 报错事务回滚
        finally:
            # 关闭连接
            cursor.close()
            conn.close()

    通过跳板机SSH连接连接MySQL

    import pymysql
    import pandas as pd
    from sshtunnel import SSHTunnelForwarder
    
    with SSHTunnelForwarder(
        # 配置SSH连接
        ssh_address_or_host=('跳板机对应的地址',int('端口号')),    # 指定SSH登陆的条件及的address
        ssh_password='跳转机密码',   # 跳转机的密码
        ssh_username='跳转机用户名',  # 跳转机的用户名
        local_bind_address=('127.0.0.1',int('2222')),   # 映射到本机的地址和端口,此处必须是127.0.0.1
        remote_bind_address=('mysql服务器地址',int('端口号'))) as server:   # MySQL服务器的配置,有数据的服务器
      conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='密码',db='数据库名',charset='utf8')
      cursor=conn.cursor()  # 获取游标

     

  • 相关阅读:
    python面试题
    面试总结
    552 Student Attendance Record II 学生出勤记录 II
    551 Student Attendance Record I 学生出勤纪录 I
    547 Friend Circles 朋友圈
    546 Remove Boxes 移除盒子
    543 Diameter of Binary Tree 二叉树的直径
    542 01 Matrix 01 矩阵
    3.1 特性
    2.6 datetime 模块
  • 原文地址:https://www.cnblogs.com/hsinfo/p/13664387.html
Copyright © 2011-2022 走看看