>[info] 在python中,操作数据库,是一件非常简单的操作。我喜欢用PyMySQL库来操作。
## 安装 pymsql
```cmd
$ python3 -m pip install PyMySQL
```
## 使用示例
进行代码演示前,我们先在数据库中创建一个简单的表。
```sql
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=1 ;
```
下面是PyMySQL对数据库的插入与查询示例代码:
```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql.cursors
# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='123456',
db='test',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
```
<br>
## 操作过程分析
**step1:连接数据库**,操作数据库前,我们首先需要连接数据库,连接语句为
```python
connection = pymysql.connect(*args,**kwargs)
```
通过源码分析,这个语句实际上是创建一个连接数据库的`Connection类的实例`。
入参有好多,如下:
![](https://box.kancloud.cn/e47e242c25246d12c6e87ed4dfd3224d_675x200.jpg)
但是我们只需要记住最关键的几个参数即可:
**host:** Host where the database server is located
**user:** Username to log in as
**password:** Password to use.
**database:** Database to use, None to not use a particular one.
**port:** MySQL port to use, default is usually OK. (default: 3306)
**charset:** Charset you want to use.
**step2:获取游标**,直接执行sql语句,操作数据库的,是一个cursor,它实际上也是一个`Cursor类的实例`,我们通过它直接与数据库交互的,下面我们称它为游标。
```python
cursor = connection.cursor()
```
cursor执行完sql语句后,需要记得关闭 cursor.close()
在本示例中,使用了with .. as ..上下文,就不需要再自行去关闭了。
**step3:执行sql语句**,由上一步我们自动,执行sql语句与数据库交互的是Cursor对象,那么我们就主要需要去了解Cursor这个类有哪些方法了。
这里我们只介绍几个最简单的方法
* execute(self, query, args=None): 执行一个sql语句
* fetchone(self):获取下一行匹配数据
* fetchmany(self, size=None):获取多行匹配数据
* fetchall(self):获取所有匹配数据
**step4:commit()提交**,所有的有关更新数据(insert,update,delete)的操作都需要commit,否则无法将数据提交到数据库
```python
connection.commit()
```
**step5:rollback()回滚**,如果提交有异常的话,我们可以进行回滚
```python
connection.commit()
```
**step6:关闭数据库连接**
```pyton
connection.close()
```
例如
```python
try:
# 执行sql语句
cursor.execute(sql)
# 提交执行
connection.commit()
except Exception as e:
# 如果执行sql语句出现问题,则执行回滚操作
connection.rollback()
print(e)
finally:
# 不论try中的代码是否抛出异常,这里都会执行
# 关闭游标和数据库连接
cursor.close()
connection.close()
```
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/2ff0bc02ec938fef8b6dd7b7f16ee11d_258x258.jpg)
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- 前言
- chapter01_开发环境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_数字的使用
- chapter06_元组的使用
- chapter07_集合的使用
- chapter08_输入输出
- chapter09_控制流程
- chapter10_实例练习_登录1
- chapter11_python函数入门
- chapter12_python中的类
- chapter13_轻松玩转python中的模块管理
- chapter14_掌握学习新模块的技巧
- chapter15_通过os模块与操作系统交互
- chapter16_子进程相关模块(subprocess)
- chapter17_时间相关模块(time & datetime)
- chapter18_序列化模块(json)
- chapter19_加密模块(hashlib)
- chapter20_文件的读与写
- chapter21_阶段考核2_登录
- chapter22_小小算法挑战(排序&二分法)
- chapter23_用多线程来搞事!
- chapter24_HTTP接口请求(requests)
- chapter25_接口测试框架(pytest)
- chapter26_阶段考核3_HTTP接口测试
- chapter27_HTML解析(pyquery)
- chapter28_阶段考核4_爬虫下载网易汽车
- chapter29_python中的那些编码坑
- chapter30_MySQL数据库操作
- chapter31 高级特性_迭代器与生成器
- chapter32 高级特性_装饰器
- chapter33 高级特性_列表处理