python接口自动化(4)操作mysql

操作mysql

安装pymysql:pip install pymysql

常用对象:

  • Connection:代表一个与MySQL Serversocket连接,使用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)
)

代码:

image-20200927105032903

解释:

  • 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工具类封装

image-20200927172148189

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)

posted @ 2020-08-31 00:37  Whatever_It_Takes  阅读(163)  评论(0编辑  收藏  举报