遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/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'} 

posted @ 2019-05-26 17:40  全栈测试笔记  阅读(21149)  评论(1编辑  收藏  举报
浏览器标题切换
浏览器标题切换end