用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\'}