🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[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测试开发圈”,了解更多测试教程!***