python接口自动化(4)操作mysql
操作mysql
安装pymysql
:pip install pymysql
常用对象:
Connection
:代表一个与MySQL Server
的socket
连接,使用connect
方法来创建一个连接实例。Cursor
:代表一个与MySQL
数据库交互对象,使用Connection.Cursor()
在当前socket
连接上的交互对象。
Connection
对象常用的API
:
connect() 创建一个数据库连接实例
begin() 开始一个事务
close() 发送一个退出消息,并关闭连接
commit() 提交修改至数据库
cursor() 创建一个cursor(游标)实例
ping() 检测服务器是否在运行
rollback() 回滚当前事务
select_db(db) 设置当前db
show_warnings() 显示警告信息
Cursor
对象常用API
:
close() 关闭当前cursor
execute() 执行一个sql语句
executemany() 执行批量sql语句
fetchall() 取所有数据
fetchone() 取一条数据
插入、查询、删除操作
新建database
:
create database pymysql;
use pymysql;
create table users(
id int primary key,
name varchar(10)
)
代码:
解释:
cursor.fetchone()
,获取一行数据,为元组类型cursor.fetchall()
,获取所有行的数据,为元组类型,元组里面包含元组,一个元组代表一样数据
import pymysql
import random
class MysqlDemo:
def __init__(self):
pass
def get_conn(self):
conn=pymysql.connect(
host="192.168.239.137",
port=3306,
user="root",
password="krystal",
db="pymysql",
charset="utf8"
)
return conn
if __name__=='__main__':
#获取cursor游标
conn=MysqlDemo().get_conn()
cursor=conn.cursor()
#插入数据:
sql1='insert into `users`(id,name) values(1,"jimmy"),(2,"krystal")'
cursor.execute(sql1)
#插入多条数据:
sql2='insert into `users`(id,name) values(%s,%s)'
sql2_data=[]
for i in range(3,10):
name="".join(random.sample('asdfghjklzxcvbnmqwertuyiop',5))
id=i
sql2_data.append((i,name)) # 封装为元组,并追加到列表中
print(sql2_data)
cursor.executemany(sql2,sql2_data)
#查询数据
sql3='select * from users limit 3'
cursor.execute(sql3)
data1=cursor.fetchone() #获取一条数据,为元组类型
data2=cursor.fetchall() #获取所有数据,为元组类型,元组包含元组
print("name:{},id:{}".format(data1[0],data1[1]))
for row in data2:
name=row[0]
id=row[1]
print("name:{},id:{}".format(name, id))
conn.commit()
cursor.close()
conn.close()
别人的mysql工具类封装
import pymysql
from warnings import filterwarnings
# 忽略Mysql告警信息
filterwarnings("ignore", category=pymysql.Warning)
class MysqlDb:
def __init__(self):
# 建立数据库连接
self.conn = pymysql.connect("192.168.239.137", "root", "krystal", "pymysql")
# 使用 cursor 方法获取操作游标,得到一个可以执行sql语句,并且操作结果作为字典返回的游标
self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def __del__(self):
# 关闭游标
self.cur.close()
# 关闭连接
self.conn.close()
def query(self, sql, state="all"):
"""
查询
:param sql:
:param state: all是默认查询全部
:return:
"""
self.cur.execute(sql)
if state == "all":
# 查询全部
data = self.cur.fetchall()
else:
# 查询单条
data = self.cur.fetchone()
return data
def execute(self, sql):
"""
更新、删除、新增
:param sql:
:return:
"""
try:
# 使用execute操作sql
rows = self.cur.execute(sql)
# 提交事务
self.conn.commit()
return rows
except Exception as e:
print("数据库操作异常 {0}".format(e))
# 回滚修改
self.conn.rollback()
if __name__ == '__main__':
mydb = MysqlDb()
r = mydb.query("select * from `users`","all")
print(r)
mydb.execute("insert into `users` (`id`,`name`) values(0,'bob')")
print(r)