访问数据库MySQL
MySQL数据库是最常用的轻量级数据库,本节介绍Python编程访问数据库MySQL。
此前,请确保已经安装了MySQL。可参考博文Ubuntu安装MySQL及常用操作安装MySQL。
Python访问MySQL有多种方式,这里主要介绍两种最常用的访问方式:
1. 利用模块PyMySQL
2. 利用支持Python的MySQL驱动包
前期准备
无论是哪种方式,首先都需要安装python模块管理工具——pip,因为我们使用的Python3,所以pip需要使用与之配套的pip3,直接使用pip的话,会默认将模块安装到python2的目录下。
1. 安装pip3
- sudo apt-get install python3-pip
Shell 命令
2. 使用pip3
利用pip3可以安装实现了各种功能的python模块,命令为:
- pip3 install modulename
Shell 命令
3. MySQL准备
接下来我们通过一个编程实例来讲解如何使用通过Python操作MySQL数据库。
如果未设置MySQL自动启动,先利用下列命令启动MySQL服务。
- service mysql start
Shell 命令
再输入命令mysql -u root -p
,并输入MySQL的登陆密码后,这里的root是笔者MySQL的用户名,进入MySQL命令行界面。为了防止和其他数据混合在一起,我们可以创建数据库pythondb。
- mysql> create database pythondb; //创建数据库pythondb
- Query OK, 1 row affected (0.01 sec)
- mysql> show databases; //显示所有数据库
- +--------------------+
- | Database |
- +--------------------+
- | pythondb |
- | sparktest |
- | sys |
- +--------------------+
- 3 rows in set (0.01 sec)
- mysql> quit //退出MySQL
- Bye
mysql
利用模块PyMySQL访问MySQL
这里我们需要利用pip3安装PyMySQL
模块来连接MySQL,命令为:
- pip3 install PyMySQL
Shell 命令
接下来进入Python命令行界面,开始利用Python编程访问MySQL数据库。连接MySQL数据库之前请确保以下事项:
1. MySQL服务已开启
2. 已创建好pythondb数据库
3. 电脑上已经安装PyMySQL模块
将下列代码写入python_mysql.py文件,保存后,利用命令python3 python_mysql.py
来执行代码。请注意,不要将python文件命名与已有模块名重复,否则在import引入时会优先引入用户创建的模块。因此这里不要将python文件命名为pymysql.py,否则会和我们下载的pymysql模块冲突。
- #引入pymysql模块。注意小写
- import pymysql
- #打开数据库连接。localhost为主机地址,root是mysql登陆名,123是登陆密码,pythondb是数据库名
- conn = pymysql.connect("localhost","root","123","pythondb")
- #使用cursor()方法获取操作游标,利用游标来进行相关的数据操作
- cursor = conn.cursor()
-
- #预定义sql语句。创建student数据库表
- create_sql = "create table student(id varchar(8),name varchar(10),age tinyint,sex varchar(2))"
- #执行sql语句
- cursor.execute(create_sql)
-
- try:
- #插入语句。%s为占位符
- cursor.execute('insert into student values (%s, %s, %s, %s)', ['201701','Tom',20,'M'])
- cursor.execute('insert into student values (%s, %s, %s, %s)', ['201702','Mary',22,'W'])
- #插入语句。有参sql的另一个传递方式。
- #三引号之间输入的内容将被原样保留,可避免繁杂的转义
- insert_sql = """insert into student values ('201703','Jack',19,'M')"""
- cursor.execute(insert_sql)
- #提交到数据库执行,不加commit,则无法提交到数据库
- #只有对数据库进行了增删改时需要提交数据库,查询不需要
- conn.commit()
- except:
- #try语句块出错时则回滚
- conn.rollback()
- #关闭数据连接
- conn.close()
Python
执行完成后,接下来检验student表是否创建成功,数据是否插入成功。另外启动一个终端,输入mysql -u root -p
进入MySQL命令行界面(root是笔者的MySQL登陆名)。
- mysql> use pythondb; #切换数据库pythondb
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
-
- Database changed
- mysql> show tables; #显示当前数据库所有表。创建student表成功
- +--------------------+
- | Tables_in_pythondb |
- +--------------------+
- | student |
- +--------------------+
- 1 row in set (0.00 sec)
-
- mysql> select * from student; #查询数据。插入数据成功
- +--------+------+------+------+
- | id | name | age | sex |
- +--------+------+------+------+
- | 201701 | Tom | 20 | M |
- | 201702 | Mary | 22 | W |
- | 201703 | Jack | 19 | M |
- +--------+------+------+------+
- 3 rows in set (0.01 sec)
mysql
输出的结果显示利用PyMySQL模块访问MySQL实验成功!
利用支持Python的MySQL驱动包
实际上,上述PyMySQL模块也是对mysql连接做了一层封装,本质上也是使用的MySQL驱动包。接下来介绍更基础的方法。
首先,安装支持Python的MySQL驱动包。
- pip3 install mysql-connector-python --allow-external mysql-connector-python
Shell 命令
接下来,编程实现读取sutdent表中的数据,以及删除指定数据。
- #导入MySQL驱动
- import mysql.connector
- #建立连接。提供mysql登陆名,登陆密码,连接的数据库名
- conn = mysql.connector.connect(user='root',password='123',database='pythondb')
- #获取游标
- cursor = conn.cursor()
- #查询语句
- select_sql = """select * from student where id = '201702'"""
- #执行语句
- cursor.execute(select_sql)
- #读取游标所指的所有数据
- #常用的还有cursor.fetchone():可返回一条数据
- data = cursor.fetchall()
- #打印数据
- print(data)
- try:
- #删除语句
- delete_sql = """delete from student where id = '201702'"""
- cursor.execute(delete_sql)
- #操作提交
- conn.commit()
- except:
- #出错时回滚
- conn.rollback()
- #关闭连接
- conn.close()
Python
执行完成后,屏幕上会输出id = '201702'
的学生信息,如下:
[('201702', 'Mary', 22, 'W')]
查看另一个终端的MySQL命令行界面,可看出id = '201702'
的学生信息已被成功删除。如下:
- mysql> select * from student;
- +--------+------+------+------+
- | id | name | age | sex |
- +--------+------+------+------+
- | 201701 | Tom | 20 | M |
- | 201703 | Jack | 19 | M |
- +--------+------+------+------+
- 2 rows in set (0.00 sec)
mysql
输出的结果显示利用支持Python的MySQL驱动访问MySQL实验成功!
总结
本文通过两种方式访问MySQL数据库,一是通过PyMySQL模块,二是通过支持Python的MySQL驱动。两种方式都是很常用的,大家可二者择一。