• (19)python操作mysql,python与mysql交互(pymysql)


    【1】PyMySQL

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

    【2】安装PyMySQL

    【2.1】方法一:命令窗口安装

      

    【2.2】pycharm 安装

      

     安装后:就有了

      

    【3】使用pymysql操作mysql

    【3.1】基本交互

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    import pymysql
    # 创建连接
    mysql_conn = pymysql.connect(host='192.168.175.129',user='root',passwd='123456',charset='utf8',db='test')
    # 创建游标、光标
    mysql_cursor = mysql_conn.cursor()
    
    # 执行sql语句
    exec_rows = mysql_cursor.execute('select 1 as id union all select 2;')
    print(exec_rows)
    # 提交连接事务
    mysql_conn.commit()
    
    # 关闭游标
    mysql_cursor.close()
    
    # 关闭连接
    mysql_conn.close()

    【3.2】获取查询结果(默认是元组)

    # -*- coding:utf8 -*-
    import pymysql
    conn = pymysql.connect(host='192.168.175.129',user='root',passwd='123456',db='test',charset='utf8')
    cursor = conn.cursor()
    result = cursor.execute('select * from test21;')   # 获取受影响的行数
    print(result)
    print(cursor.fetchone())   # 获取第一行数据
    print(cursor.fetchall())   # 获取剩余所有行数据
    
    cursor.close()
    conn.close()
    
    '''
    注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
    
    cursor.scroll(1,mode='relative')  # 相对当前位置移动
    cursor.scroll(2,mode='absolute') # 相对绝对位置移动
    '''

    【修改cursor查询结果fetch数据类型】

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import pymysql
      
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
      
    # 游标设置为字典类型
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    r = cursor.execute("call p1()")
      
    result = cursor.fetchone()
      
    conn.commit()
    cursor.close()
    conn.close()

    【3.3】获取最新的自增ID

    # -*- coding:utf8 -*-
    import pymysql
    mysql_conn = pymysql.connect(host='192.168.175.129',user='root',passwd='123456',db='test',charset='utf8')
    mysql_cursor = mysql_conn.cursor()
    
    # mysql_cursor.execute('''drop table if exists test1_1; ''')
    # mysql_cursor.execute('''create table test1_1(id int primary key auto_increment,num int); ''')
    mysql_cursor.execute('''insert into test1_1 values(%s,%s);''',(None,1))
    mysql_conn.commit()
    print(mysql_cursor.lastrowid)
    mysql_conn.close()

    【3.4】查询表结果,插入到另一个表

    mssql 查询结果 插入到mysql,操作一样

    import pymssql
    import pymysql
    
    mssql_db = {
        'mssql1': {
            'host': '192.168.191.81'
            , 'user': 'sa'
            , 'password': 'a123456!'
            , 'database': 'master'
        }
        , 'mssql2': {
            'host': '192.168.191.80'
            , 'user': 'sa'
            , 'password': 'a123456!'
            , 'database': 'master'
        }
    }
    mysql_db = {
        'mysql1': {
            'host': '192.168.175.129'
            , 'user': 'root'
            , 'password': '123456'
            , 'database': 'test'
        }
    }
    mysql_host = mysql_db['mysql1']['host']
    mysql_user = mysql_db['mysql1']['user']
    mysql_password = mysql_db['mysql1']['password']
    mysql_database = mysql_db['mysql1']['database']
    mysql_conn = pymysql.connect(host=mysql_host, user=mysql_user, password=mysql_password, database=mysql_database,charset='utf8')
    mysql_cursor = mysql_conn.cursor()
    for i in mssql_db:
        mssql_host = mssql_db[i]['host']
        mssql_user = mssql_db[i]['user']
        mssql_password = mssql_db[i]['password']
        mssql_database = mssql_db[i]['database']
        mssql_conn = pymssql.connect(host=mssql_host, user=mssql_user, password=mssql_password, database=mssql_database,charset='utf8')
        mssql_cursor = mssql_conn.cursor()
        mssql_sql = """select 'a' as info,'a1' as info1,1 as r
        union all
        select 'b','b1',2
        """
        mssql_cursor.execute(mssql_sql)
        rs = mssql_cursor.fetchall()
        for q in range(len(rs)):   #获取行数据
            values = rs[q]
            db_insert = 'insert into test_mysql values('
            row_len = len(rs[q])  #获取一行有多少列,列的个数
            for q1 in range(row_len):  #根据列的个数,拼接动态SQL,以便一次直接插入一行
                db_insert = db_insert+'%s,'
            db_insert = db_insert[:-1]+');'
            print(db_insert)
            mysql_cursor.execute(db_insert,values)   #直接插入一行,vlaues 为元组中的 元组(即一行)
            mysql_conn.commit()
  • 相关阅读:
    表相关操作
    表的约束
    windows平台MySQL安装
    网络编程2
    Python元类
    并发编程这个只是占位使用而已
    并发编程2
    并发编程1
    Mac装机神器Homebrew
    基于Django框架开发BBS项目
  • 原文地址:https://www.cnblogs.com/gered/p/14325404.html
Copyright © 2020-2023  润新知