uncleyong

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

分类:

技术点:

相关文章: