首页 > 数据库 >python中的mysql操作教程及实例

python中的mysql操作教程及实例

时间:2022-12-28 16:33:40浏览次数:79  
标签:教程 cur python mysql db pymysql sql conn

一. 数据库在自动化测试中的应用

存测试数据

有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到,测试的时候就从数据库中读取出来。这点是非常重要的!

存测试结果

二. python中的数据库之必备前提条件

1. 安装:pyMysql

python2中使用mysqldb,python3中不再支持,换成pyMysql

2. 安装步骤

  1. 安装pyMysql模块:pip install PyMysql

  2. python连接mysql数据库,需要下载驱动:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方网站提供的驱动版本,目前只支持到python3.4,python版本要与驱动支持的版本匹配才能安装成功

  3. 安装mysql图形界面Navicat,连接数据库后,方便查看/编辑数据库数据

(可选)安装mysql服务端:https://dev.mysql.com/downloads/mysql/

3. 数据库的常规操作

增删改查,所以我们要学的也是利用python去数据库里面读取数据,进行增删改查操作

三. python—mysql操作

对数据库进行操作步骤:

  1. 连接数据库、创建游标

  2. 准备好增、删、改、查sql语句

  3. 执行sql语句

  4. 读取执行结果—执行影响的行

  5. 关闭游标、关闭连接(释放连接数)

数据库连接信息如下:

IP地址、端口号、数据库名字、登录用户名、密码

pymysql中的连接数据库方法:

conn = pymysql.Connect(host, port, db, user, passwd)

cursorclass = pymysql.cursors.DictCursor   指定返回数据为字典形式

创建游标:

cursor = conn.cursor()  每次操作都需要获取游标,才能进行

四. python之查询数据

1. 查询数据语法

sql语句:select 字段 from 表名 where 条件语句

2. 展示数据,需要调用如下函数

fetchall():返回的数据格式是列表形式的

fetchone():返回的数据格式是元组形式的(可以用cursorclass = pymysql.cursors.DictCursor改成字典的形式)

3. 条件语句的用法

重点看代码,掌握用法

五. python之execute

execute中,sql语句的多种方式:

execute(sql语句、参数[可选]):

  1. 数据直接写在sql语句中

  2. 用格式化的方式

sql语句中:列表和元组   %s代替

     字典:%(键名)s代替

参数:为真正的数值

例:

insert_sql = "insert into test1(id, name) values(%s, %s)"

data = [14, 'xiaojian']

#字典

data1 = {'id': 14, 'name': 'xiaojian'}

insert_sql = "insert into test1(id, name) values(%(id)s, %(name)s)"

 

cursor.execute(insert_sql, data) 

六. 提交和回滚

提交操作:在对数据库进行任何修改的情况下,都使用commit函数来提交操作

修改包括增加、修改、删除数据等操作

提交修改:

conn.commit()

回滚操作:在对数据库进行修改的过程中,因任何异常而导致修改中断,我们都应该使用回滚操作使数据库恢复到修改之前的状态

回滚修改:

conn.rollback()

七. 实例

实例1:增加数据

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"

#连接操作:编码格式的指定,默认返回数据类型的指定 
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd, 
          db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) 

#获取游标 cur = conn.cursor() 

#sql语句——增加数据 
sql_insert = "insert into python6(name, sex) values('xiaohua', 'female')" 
#执行sql语句 
try: 
  cur.execute(sql_insert) 
  conn.commit() 
except: 
  conn.rollback() 


#关闭连接、关闭游标 
cur.close() 
conn.close()

运行结果:
在这里插入图片描述

实例2:查询数据

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#查询语句
sql_select = "select * from python6"
#执行
cur.execute(sql_select)
#获取查询结果——会获取一条数据
data_a = cur.fetchone()
print(data_a)
print("=============================")
#获取查询结果——获取所有条数据(游标已经到了第二条,从第二条开始读)
data_all = cur.fetchall()
print(data_all)

#关闭连接、关闭游标
cur.close()
conn.close()

运行结果

{'id': 1, 'sex': 'male', 'name': 'xiaozhai'}
=============================
[{'id': 2, 'sex': 'male', 'name': 'xiaoli'}, {'id': 3, 'sex': 'female', 'name': 'xiaohua'}]

实例3:格式化方式插入数据

列表形式

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#格式化方式插入数据
data_list = ["xiaozhao", "female"]
sql_insert = "insert into python6(name, sex) values(%s, %s)"

#执行sql语句
try:
    cur.execute(sql_insert, data_list)
    conn.commit()
except:
    conn.rollback()


#关闭连接、关闭游标
cur.close()
conn.close()

运行结果
在这里插入图片描述
字典形式

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#格式化方式插入数据
data_dict = {"name": "xiaoliu", "sex":"female"}
sql_insert = "insert into python6(name, sex) values (%(name)s, %(sex)s)"

#执行sql语句
try:
    cur.execute(sql_insert, data_dict)
    conn.commit()
except:
    conn.rollback()


#关闭连接、关闭游标
cur.close()
conn.close()

运行结果
在这里插入图片描述

实例4:封装成类

import pymysql

class Mysql_Operate:

    def __init__(self, host, db, user, passwd, port=3306):
		#python学习交流群:711312441
        #连接数据库
        try:
            self.conn = pymysql.Connect(host=host, user=user, password=passwd,
                                   db=db, port=port, charset="utf8mb4",
                                   cursorclass=pymysql.cursors.DictCursor)
            #获取游标
            self.cur = self.conn.cursor()
            #没有异常,connect_flag为0
            self.connect_flag = 0
        except Exception as e:
            print(e)
            self.connect_flag = 1

    #查找
    def select_all_datas(self, select_sql):
        #查询数据——execute函数
        self.cur.execute(select_sql)
        #获取所有的数据并返回
        data_all = self.cur.fetchall()
        return data_all

    #更新数据
    def update_datas(self, update_sql ):
        try:
            self.cur.execute(update_sql)
            self.conn.commit()
            return True
        except:
            self.conn.rollback()
            return False

    #关闭数据库连接
    def close_db(self):
        self.cur.close()
        self.conn.close()


mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"

ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db)
if ms.connect_flag == 0:
    pass

标签:教程,cur,python,mysql,db,pymysql,sql,conn
From: https://www.cnblogs.com/xxpythonxx/p/17010418.html

相关文章

  • mysql 循环遍历结果集,来逐条更新
    SELECTUSER_IDFROMua;会返回USER_ID的列表  通过循环来逐条更新符合USER_ID的记录#delimiter$$告诉解释器使用$$结尾delimiter$$DROPPROCEDUREIFEXIST......
  • 数值计算:前向和反向自动微分(Python实现)
    1自动微分我们在《数值分析》课程中已经学过许多经典的数值微分方法。许多经典的数值微分算法非常快,因为它们只需要计算差商。然而,他们的主要缺点在于他们是数值的,这意味......
  • 七彩多层水晶字体PHOTOSHOP教程
    多层的七彩水晶字体效果,非常漂亮,这个教程能让我们学到很多新鲜东西,来吧,跟着我开始这个教程900px×900px分辨率为300像素/英寸,颜色为RGB,文件命名为”A”步揍二:用灰色填充背......
  • Xara3D 6.0动画文字软件教程(一)
        我一直很喜欢3D动态字,平时在网上看到一些祝福类的动态字就收藏起来,给朋友送去生日祝福等可以随时派上用场。  ​​董建华​​老太家订做“相濡以沫三十九载”纪......
  • python中的集合推导式
    集合推导式可用来去重需求:将列表list1=[2,2,2,3,4,4,4]中的偶数进行筛选,并且去重list1=[2,2,2,3,4,4,4]set1={iforiinlist1ifi%2==0}print(set......
  • python中的列表推导式
    1.单列表,单条件求1-20之间的偶数list1=[]foriinrange(1,21):ifi%2==0:list1.append(i)print(list1)列表推导式list2=[iforiinrange(1,21)if......
  • C#的λ表达式树(LambdaExpression)保姆级超详细简单入门教程
    有看过我之前发表过的C#相关文章分享和阅读过我代码的朋友们可能会在我的代码里面经常看到各种各样的λ表达式动态拼接,C#的λ表达式树是一个好东西,也是别的语言学不来......
  • Python爬虫(一)热身
    基础操作一importurllibimportchardet#字符集检测url="http://www.163.com/"html=urllib.urlopen(url)printhtml.headers#头部信息printhtml.getcode()#状态......
  • 当我把用Python做的课堂点名系统献给各科老师后,再也没挂过科
    刚上大学的表弟问我,大学准备好好玩玩,问我有没有什么不挂科的秘诀。哎,这可就问对人了,要想不挂科,先把老师贿赂好,当然,咱们说的贿赂不是送钱啥的,这不是侮辱老师吗?于是我......
  • python中resp.json()与json.loads(str)的区别
    resp=resquests.get(url)print(type(resp))#<class'requests.models.Response'>第一行代码使用requests库发送get请求,得到响应数据resp。第二行代码的输......