python中的mysql操作
一. 数据库在自动化测试中的应用
存测试数据
有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到,测试的时候就从数据库中读取出来。这点是非常重要的!
存测试结果
二. 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 = 3306mysql_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 = "
#连接操作:编码格式的指定,默认返回数据类型的指定
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 = "
#连接操作:编码格式的指定,默认返回数据类型的指定
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 = "
#连接操作:编码格式的指定,默认返回数据类型的指定
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):
#连接数据库
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 = "
ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db)
if ms.connect_flag == 0:
pass
python中的mysql操作的更多相关文章
- Python中使用Mysql(安装篇)
准备工作 import MySQLdb Linux系统自带了Python,但并不是都有这个包,至少我每次拿到一台全新的服务器时候,都发现没有装这个包. 这个东西的下载地址是 http://source ...
- Navicat的使用与python中使用MySQL的基本方法
Navicat的使用与python中使用MySQL的基本方法 Navicat的下载及安装 下载地址 http://www.navicat.com.cn/download/navicat-premium ...
- python中的赋值操作和复制操作
之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...
- python中的赋值操作
参考:https://www.cnblogs.com/andywenzhi/p/7453374.html?tdsourcetag=s_pcqq_aiomsg(写的蛮好) python中的赋值操作“=” ...
- python中的日志操作和发送邮件
1.python中的日志操作 安装log模块:pip install nnlog 参数:my_log = nnlog.Logger('server_log.log',level='debug',bac ...
- python中实现mysql连接池
python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...
- python中OS模块操作文件和目录
在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...
- Python中的字符串操作总结(Python3.6.1版本)
Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...
- Python中的json操作
Python中的json操作 标签(空格分隔): python 编码 json 字符串前缀问题 字符串前缀可以有r,u r:表示原始(raw)字符串,比如'\n'不会被转义.常用于正则. u:表示un ...
随机推荐
- python2 一些错误处理
python2各种问题 pip安装django出错:python2 -m pip install django 编码问题:Unicode Decode Error ascii codec can't ...
- 我的Android进阶之旅------>Android Listview跳到指定条目位置的两种实现方法
前言 今天实现ListView跳转到第一个条目位置时,使用smoothScrollToPosition(int position)方法跳转实现了,但是交互说不需要这样的动画效果,需要直接跳转到第一项, ...
- 静默安装oracle 11g及参数配置优化详解
一.安装前准备工作1.修改主机名#vi /etc/hosts //并添加内网IP地址对应的hostname,如下127.0.0.1 localhost::1 ...
- C语言高级宏技巧
特殊符号#.## (1)# When you put a # before an argument in a preprocessor macro, the preprocessor turns t ...
- unix 全缓冲、行缓冲、无缓冲
基于流的操作最终会调用read或者write函数进行I/O操作.为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O库函数的次数. 基于流的I/O提供以下3种缓冲: 全 缓冲:直到缓 ...
- kubeadm方式安装kubernetes
系统: Ubuntu 18.04.2 LTS 内存: 8G 机器: 属性 IP Hostname ssh Master 192.168.91.48 blackray-pc node1 1 ...
- Android位置权限以及数组寻找索引的坑
填坑与求解惑来的. 一.Android 危险权限,来自官方文档的坑??? Android开发者都知道,Android 6.0 之前,权限申请只需要在 AndroidManifest.xml 文件中声明 ...
- 关于myeclipse+tomcat+struct2的热部署问题
今天满心欢喜的打开电脑来写程序,却不曾想到它竟然给我搞事情,前几天刚学的struct2热部署竟然不好用了.每次改java文件都要重新部署好麻烦,最后花了了好长时间才解决,必须在这里总结一下: (1)s ...
- spring的线程安全
Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”.但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码.Spring对每个bean提供 ...
- java的arrayCopy用法
java的arrayCopy用法 final , ); //System.arraycopy(samplesConverted, 0, bytes, 0, 1024); 先贴上语法: publ ...