zoukankan      html  css  js  c++  java
  • python操作mysql(增、删、改、查)

    用python操作数据库,特别是做性能测试造存量数据时特别简单方便,比存储过程方便多了。

    连接数据库

    前提:安装mysql、python,参考:https://www.cnblogs.com/UncleYong/p/10530261.html

    数据库qzcsjb的test表中初始化的数据:

    安装pymysql模块,pip install pymysql

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor()
    
    # 执行sql语句
    sql = 'select * from test where name = "%s" and id="%s"' %('qzcsbj1','1')
    rows=cursor.execute(sql)  # 返回结果是受影响的行数
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close()
    
    # 判断是否连接成功
    if rows >= 0:
        print('连接数据库成功')
    else:
        print('连接数据库失败')  

    增加数据

    单条

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor()
    
    # 执行sql语句
    sql='insert into test(id,name) values(%s,%s)'
    rows=cursor.execute(sql,('4','qzcsbj4'))
    
    # 提交
    conn.commit()
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close()  

    多条

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor()
    
    # 执行sql语句
    sql='insert into test(id,name) values(%s,%s)'
    rows=cursor.executemany(sql,[('5','qzcsbj5'),('6','qzcsbj6'),('7','qzcsbj7')])
    
    # 提交
    conn.commit()
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close()
    

    大批量新增

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    values=[]
    for i in range(100, 201):
        values.append((i, 'qzcsbj'+str(i)))
    sql='insert into test(id,name) values(%s,%s)'
    rows=cursor.executemany(sql,values)
    
    # 提交
    conn.commit()
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close() 

    修改数据

    把上面大批量新增的数据删除,delete from test where id>=100;

    单条

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor()
    
    # 执行sql语句
    sql='update test set name = %s where id = %s'
    rows=cursor.execute(sql,('qzcsbj','7'))
    
    # 提交
    conn.commit()
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close() 

    多条 

    import pymysql
    
    # 建立数据库连接
    conn=pymysql.connect(
        host='192.168.168.168',
        port=3306,
        user='root',
        password='mysql',
        db='qzcsbj',
        charset='utf8'
    )
    
    # 获取游标
    cursor=conn.cursor()
    
    # 执行sql语句
    sql='update test set name = %s where id = %s'
    rows=cursor.executemany(sql,[('全栈测试笔记5','5'),('全栈测试笔记6','6')])
    
    # 提交
    conn.commit()
    
    # 关闭游标
    cursor.close()
    
    # 关闭连接
    conn.close()  

    删除数据

    单条

    下面脚本和上面增加数据,除了执行sql语句部分不一样,其余都一样

    # 执行sql语句
    sql='delete from test where id = %s'
    rows=cursor.execute(sql,('1',)) 

     多条

    下面脚本和上面增加数据,除了执行sql语句部分不一样,其余都一样

    # 执行sql语句
    sql='delete from test where id = %s'
    rows=cursor.executemany(sql,[('2'),('3')]) 

    查询数据

    fetchone

    有点像从管道中取一个,如果再来一个fetchone,会又取下一个,如果取完了再取,就返回None

    每条记录为元组格式

    下面脚本和上面增加数据,除了执行sql语句部分不一样,其余都一样

    # 执行sql语句
    rows=cursor.execute('select * from test;')
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone()) 

    运行结果:

    (4, 'qzcsbj4')
    (5, '全栈测试笔记5')
    (6, '全栈测试笔记6')
    (7, 'qzcsbj')
    None

    每条记录为字典格式

    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    rows=cursor.execute('select * from test;')
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone())
    print(cursor.fetchone())  

    运行结果:

    {'id': 4, 'name': 'qzcsbj4'}
    {'id': 5, 'name': '全栈测试笔记5'}
    {'id': 6, 'name': '全栈测试笔记6'}
    {'id': 7, 'name': 'qzcsbj'}
    None 

    fetchmany

    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    rows=cursor.execute('select * from test;')
    print(cursor.fetchmany(2))  

    运行结果:

    [{'id': 4, 'name': 'qzcsbj4'}, {'id': 5, 'name': '全栈测试笔记5'}] 

    fetchall

    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    rows=cursor.execute('select * from test;')
    print(cursor.fetchall())
    print(cursor.fetchall())  

    运行结果:

    [{'id': 4, 'name': 'qzcsbj4'}, {'id': 5, 'name': '全栈测试笔记5'}, {'id': 6, 'name': '全栈测试笔记6'}, {'id': 7, 'name': 'qzcsbj'}]
    [] 

    相对绝对位置移动

    从头开始跳过n个

    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    rows=cursor.execute('select * from test;')
    cursor.scroll(3,mode='absolute')
    print(cursor.fetchone())

    运行结果:

    {'id': 7, 'name': 'qzcsbj'}

    相对当前位置移动
    # 获取游标
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    # 执行sql语句
    rows=cursor.execute('select * from test;')
    print(cursor.fetchone())
    cursor.scroll(2,mode='relative')
    print(cursor.fetchone())

    运行结果:

    {'id': 4, 'name': 'qzcsbj4'}
    {'id': 7, 'name': 'qzcsbj'} 

  • 相关阅读:
    代理模式与Android
    图数据库 Titan 高速入门
    怎样编写支持命令行选项的程序
    协方差的意义
    我所理解的Spring AOP的基本概念
    Google搜索解析
    POJ 3311 Hie with the Pie floyd+状压DP
    JS怎样将拖拉事件与点击事件分离?
    C++语言笔记系列之十二——C++的继承
    Mac下Android配置及unity3d的导出Android
  • 原文地址:https://www.cnblogs.com/uncleyong/p/10938993.html
Copyright © 2011-2022 走看看