Python 之 PyMySQL 安装和使用
Python具有内置的SQLite支持。 在本节中,我们将学习使用MySQL的相关概念和知识。 在早期Python版本一般都使用MySQLdb模块,但这个MySQL的流行接口与Python 3不兼容。因此,在教程中将使用PyMySQL模块。
1.什么是PyMySQL?
PyMySQL是从Python连接到MySQL数据库服务器的接口。 它实现了Python数据库API v2.0,并包含一个纯Python的MySQL客户端库。 PyMySQL的目标是成为MySQLdb的替代品。
PyMySQL参考文档:http://pymysql.readthedocs.io/
2.如何安装PyMySQL?
在使用PyMySQL之前,请确保您的机器上安装了PyMySQL。只需在Python脚本中输入以下内容即可执行它 -
#!/usr/bin/python3import pymysql
Python
在 Windows 系统上,打开命令提示符 -
- C:\Users\Administrator>python
- Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import PyMySQL
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- ModuleNotFoundError: No module named 'PyMySQL'
- >>>
Shell
如果产生如上结果,则表示PyMySQL模块尚未安装。
最后一个稳定版本可以在PyPI上使用,可以通过pip命令来安装-
- :\Users\Administrator> pip install PyMySQL
- Collecting PyMySQL
- Downloading PyMySQL-0.7.11-py2.py3-none-any.whl (78kB)
- 51% |████████████████▋ |
- 40kB 109kB/s eta 0:0 64% |████████████████████▊
- | 51kB 112kB/s eta 77% |█████████████████████████ | 61kB 135kB/s 90% |█████████████████████████████
- | 71kB 152 100% |████████████████████████████████| 81kB 163kB/s
- Installing collected packages: PyMySQL
- Successfully installed PyMySQL-0.7.11
- C:\Users\Administrator>
Shell
或者(例如,如果pip不可用),可以从GitHub下载tarball,并按照以下方式安装:
- $ # X.X is the desired PyMySQL version (e.g. 0.5 or 0.6).
- $ curl -L http://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
- $ cd PyMySQL*
- $ python setup.py install
- $ # The folder PyMySQL* can be safely removed now.
Shell
注意 - 确保具有root权限来安装上述模块。
3.数据库连接
在连接到MySQL数据库之前,请确保以下几点:
- 已经创建了一个数据库:
test。 - 已经在
test中创建了一个表:employee。 employee表格包含:fist_name,last_name,age,sex和income字段。- MySQL用户“root”和密码“123456”可以访问:
test。 - Python模块PyMySQL已正确安装在您的计算机上。
- 已经通过MySQL教程了解MySQL基础知识。
创建表employee的语句为:
CREATE TABLE `employee` (`id` int(10) NOT NULL AUTO_INCREMENT,`first_name` char(20) NOT NULL,`last_name` char(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`income` float DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL
实例
以下是Python通过PyMySQL模块接口连接MySQL数据库“test”的示例 -
注意:在 Windows 系统上,
import PyMySQL和import pymysql有区别。
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# execute SQL query using execute() method.cursor.execute("SELECT VERSION()")# Fetch a single row using fetchone() method.data = cursor.fetchone()print ("Database version : %s " % data)# disconnect from serverdb.close()
Python
运行此脚本时,会产生以下结果 -
Database version : 5.7.14-log
Shell
如果使用数据源建立连接,则会返回连接对象并将其保存到db中以供进一步使用,否则将db设置为None。 接下来,db对象用于创建一个游标对象,用于执行SQL查询。 最后,在结果打印出来之前,它确保数据库连接关闭并释放资源。
4.创建数据库表
建立数据库连接后,可以使用创建的游标的execute方法将数据库表或记录创建到数据库表中。
示例
下面演示如何在数据库:test中创建一张数据库表:employee -
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# Drop table if it already exist using execute() method.cursor.execute("DROP TABLE IF EXISTS employee")# Create table as per requirementsql = """CREATE TABLE `employee` (`id` int(10) NOT NULL AUTO_INCREMENT,`first_name` char(20) NOT NULL,`last_name` char(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`income` float DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""cursor.execute(sql)print("Created table Successfull.")# disconnect from serverdb.close()
Python
运行此脚本时,会产生以下结果 -
Created table Successfull.
Shell
5.插入操作
当要将记录创建到数据库表中时,需要执行INSERT操作。
示例
以下示例执行SQL的INSERT语句以在EMPLOYEE表中创建一条(多条)记录 -
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to INSERT a record into the database.sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)VALUES ('Mac', 'Su', 20, 'M', 5000)"""try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()## 再次插入一条记录# Prepare SQL query to INSERT a record into the database.sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)VALUES ('Kobe', 'Bryant', 40, 'M', 8000)"""try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()print (sql)print('Yes, Insert Successfull.')# disconnect from serverdb.close()
Python
运行此脚本时,会产生以下结果 -
Yes, Insert Successfull.
Shell
上述插入示例可以写成如下动态创建SQL查询 -
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to INSERT a record into the database.sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \LAST_NAME, AGE, SEX, INCOME) \VALUES ('%s', '%s', '%d', '%c', '%d' )" % \('Max', 'Su', 25, 'F', 2800)try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()# disconnect from serverdb.close()
Python
示例
以下代码段是另一种执行方式,可以直接传递参数 -
..................................user_id = "test123"password = "password"con.execute('insert into Login values("%s", "%s")' % \(user_id, password))..................................
Python
6.读取操作
任何数据库上的读操作表示要从数据库中读取获取一些有用的信息。
在建立数据库连接后,就可以对此数据库进行查询了。 可以使用fetchone()方法获取单条记录或fetchall()方法从数据库表中获取多个值。
fetchone()- 它获取查询结果集的下一行。 结果集是当使用游标对象来查询表时返回的对象。fetchall()- 它获取结果集中的所有行。 如果已经从结果集中提取了一些行,则从结果集中检索剩余的行。rowcount- 这是一个只读属性,并返回受execute()方法影响的行数。
示例
以下过程查询EMPLOYEE表中所有记录的工资超过1000员工记录信息 -
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# 按字典返回# cursor = db.cursor(pymysql.cursors.DictCursor)# Prepare SQL query to select a record from the table.sql = "SELECT * FROM EMPLOYEE \WHERE INCOME > %d" % (1000)#print (sql)try:# Execute the SQL commandcursor.execute(sql)# Fetch all the rows in a list of lists.results = cursor.fetchall()for row in results:#print (row)fname = row[1]lname = row[2]age = row[3]sex = row[4]income = row[5]# Now print fetched resultprint ("name = %s %s,age = %s,sex = %s,income = %s" % \(fname, lname, age, sex, income ))except:import tracebacktraceback.print_exc()print ("Error: unable to fetch data")# disconnect from serverdb.close()
Python
- name = Mac Su,age = 20,sex = M,income = 5000.0
- name = Kobe Bryant,age = 40,sex = M,income = 8000.0
Shell
7.更新操作
UPDATE语句可对任何数据库中的数据进行更新操作,它可用于更新数据库中已有的一个或多个记录。
以下程序将所有SEX字段的值为“M”的记录的年龄(age字段)更新为增加一年。
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() method#cursor = db.cursor()cursor = db.cursor(pymysql.cursors.DictCursor)# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to UPDATE required recordssql = "UPDATE EMPLOYEE SET AGE = AGE + 1 \WHERE SEX = '%c'" % ('M')try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()# disconnect from serverdb.close()
Python
8.删除操作
当要从数据库中删除一些记录时,那么可以执行DELETE操作。 以下是删除EMPLOYEE中AGE超过40的所有记录的程序 -
#!/usr/bin/python3#coding=utf-8import pymysql# Open database connectiondb = pymysql.connect("localhost","root","123456","test" )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to DELETE required recordssql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (40)try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()# disconnect from serverdb.close()
Python
9.执行事务
事务是确保数据一致性的一种机制。事务具有以下四个属性 -
- 原子性 - 事务要么完成,要么完全没有发生。
- 一致性 - 事务必须以一致的状态开始,并使系统保持一致状态。
- 隔离性 - 事务的中间结果在当前事务外部不可见。
- 持久性 - 当提交了一个事务,即使系统出现故障,效果也是持久的。
Python DB API 2.0提供了两种提交或回滚事务的方法。
示例
已经知道如何执行事务。 这是一个类似的例子 -
# Prepare SQL query to DELETE required recordssql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try:# Execute the SQL commandcursor.execute(sql)# Commit your changes in the databasedb.commit()except:# Rollback in case there is any errordb.rollback()
Python
9.1.COMMIT操作
提交是一种操作,它向数据库发出信号以完成更改,并且在此操作之后,不会更改任何更改。
下面是一个简单的例子演示如何调用commit()方法。
db.commit()
Python
9.2.回滚操作
如果您对一个或多个更改不满意,并且要完全还原这些更改,请使用rollback()方法。
下面是一个简单的例子演示如何调用rollback()方法。
db.rollback()
Python
10.断开数据库连接
要断开数据库连接,请使用close()方法。
db.close()
Python
如果用户使用close()方法关闭与数据库的连接,则任何未完成的事务都将被数据库回滚。 但是,您的应用程序不会依赖于数据级别的实现细节,而是明确地调用提交或回滚。
11.处理错误
错误有很多来源。一些示例是执行的SQL语句中的语法错误,连接失败或为已取消或已完成语句句柄调用fetch方法等等。
DB API定义了每个数据库模块中必须存在的许多错误。下表列出了这些异常和错误 -
| 编号 | 异常 | 描述 |
|---|---|---|
| 1 | Warning | 用于非致命问题,是StandardError的子类。 |
| 2 | Error | 错误的基类,是StandardError的子类。 |
| 3 | InterfaceError | 用于数据库模块中的错误,但不是数据库本身,是Error的子类。 |
| 4 | DatabaseError | 用于数据库中的错误,是Error的子类。 |
| 5 | DataError | DatabaseError的子类引用数据中的错误。 |
| 6 | OperationalError | DatabaseError的子类,涉及如丢失与数据库的连接等错误。 这些错误通常不在Python脚本程序的控制之内。 |
| 7 | IntegrityError | DatabaseError 子类错误,可能会损害关系完整性,例如唯一性约束和外键。 |
| 8 | InternalError | DatabaseError的子类,指的是数据库模块内部的错误,例如游标不再活动。 |
| 9 | ProgrammingError | DatabaseError的子类,它引用错误,如错误的表名和其他安全。 |
| 10 | NotSupportedError | DatabaseError的子类,用于尝试调用不支持的功能。 |
Python脚本应该处理这些错误,但在使用任何上述异常之前,请确保您的PyMySQL支持该异常。 可以通过阅读DB API 2.0规范获得更多关于它们的信息。
Python 之 PyMySQL 安装和使用的更多相关文章
- Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁
Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...
- python之pymysql模块学习(待完善...)
pymysql介绍 pymysql是在python3.x版本中用于连接mysql服务器的一个库.python2中则使用mysqldb. 安装方法: pip install pymysql 使用实例: ...
- pymysql安装和使用
一.pymysql安装 安装mymysql前请确认python环境已经准备好,在之前的博文http://www.cnblogs.com/newzol/p/8682176.html有说明pythonwe ...
- python 相关模块安装 国内镜像地址
python 相关模块安装 国内镜像地址 pipy国内镜像目前有: http://pypi.douban.com/ 豆瓣 http://pypi.hustunique.com/ 华中理工大学 ht ...
- python的pymysql模块简介
一.介绍 在python中用pymysql模块来对mysql进行操作,该模块本质就是一个套接字客户端软件,使用前需要事先安装 pip3 install pymysql 二.操作简介 import py ...
- Python 2/3 安装与运行环境设置
Python 2/3 安装与运行环境设置: 1.Python 软件源:https://www.python.org/ 下载Win版本 https://www.python.org/downloa ...
- Python介绍、安装、使用
Python介绍.安装.使用 搬运工:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python语言介绍 说到Python语言,就不得不说一下它的创始人Guido van Rossu ...
- python开发_mysqldb安装
在python的API上面,看到了MySQLdb,即python可以操作mysql数据库 接下来,我就把我这两天的工作给大伙絮叨絮叨: 准备条件: 1.MySQL-python-1.2.4b4.win ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
随机推荐
- laydate时间控件:开始时间,结束时间最大最小值
时间控件地址及插件下载链接:https://www.layui.com/doc/modules/laydate.html 填充时间已两个功能为例: 1.添加功能 :时间 规则:选择开始时间后,点击结束 ...
- CF1210A Anadi and Domino
思路: 很有意思的思维题. 实现: #include <bits/stdc++.h> using namespace std; int check(vector<int>&am ...
- 关于PADS的一些概念和实用技巧(一)
关于PADS的一些概念和实用技巧(一) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 1. 关于part,CAE Decal,PCB Decal Part ...
- 移动架构之MVP框架
MVP是在开发中常用的框架,要了解其原理,先要从了解MVC开始,这里就对MVP框架做一个简单的介绍 MVC MVC为Model,View与Controllor的缩写 Model:业务逻辑和实体模型 V ...
- Python2 中字典实现的分析【翻译】
在这片文章中会介绍 Python2 中字典的实现,Hash 冲突的解决方法以及在 C 语言中 Python 字典的具体结构,并分析了数据插入和删除的过程.翻译自python-dictionary-im ...
- 方法区(关于java虚拟机内存的那些事)
<深入理解 java 虚拟机> 读书扩展 作者:淮左白衣 写于 2018年4月13日21:26:05 目录 方法区 图例(方法区中都保存什么) 类型信息 类型的常量池 (即运行时常量池) ...
- PAT甲级 排序题_C++题解
排序题 PAT (Advanced Level) Practice 排序题 目录 <算法笔记> 6.9.6 sort()用法 <算法笔记> 4.1 排序题步骤 1012 The ...
- # VsCode 配置C++调试运行
VsCode 配置C++调试运行 打开命令面板快捷键为F1,软件上写的Ctrl+Shift+P似乎没用 先安装插件使得可以运行 先自行在vsc扩展中搜索C++安装C/C++插件 再参考知乎专栏中安装c ...
- (转)从0移植uboot (四) _点亮调试LED
这一节主要讨论1个问题:点灯.点灯是实际开发中,特别是裸板开发中常见的调试手段,相当于主机开发中漫天飞舞的printf/printk.为了追踪程序的现场执行情况,很多时候我们都使用点一个灯的方法来进行 ...
- MongoDB增删改
一.数据库操作 显示现有的数据库,命令:show dbs 或者 databases; 示当前使用的数据库,命令:db 切换当前使用的数据库,命令:use 数据库名称 删除数据库,命令:db.dropD ...