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'}
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!