Python:访问数据库MySQL

访问数据库MySQL

MySQL数据库是最常用的轻量级数据库,本节介绍Python编程访问数据库MySQL。
此前,请确保已经安装了MySQL。可参考博文Ubuntu安装MySQL及常用操作安装MySQL。
Python访问MySQL有多种方式,这里主要介绍两种最常用的访问方式:
1. 利用模块PyMySQL
2. 利用支持Python的MySQL驱动包


前期准备

无论是哪种方式,首先都需要安装python模块管理工具——pip,因为我们使用的Python3,所以pip需要使用与之配套的pip3,直接使用pip的话,会默认将模块安装到python2的目录下。
1. 安装pip3

 
  1. sudo apt-get install python3-pip
Shell 命令

2. 使用pip3
利用pip3可以安装实现了各种功能的python模块,命令为:

 
  1. pip3 install modulename
Shell 命令

3. MySQL准备
接下来我们通过一个编程实例来讲解如何使用通过Python操作MySQL数据库。
如果未设置MySQL自动启动,先利用下列命令启动MySQL服务。

 
  1. service mysql start
Shell 命令

再输入命令mysql -u root -p,并输入MySQL的登陆密码后,这里的root是笔者MySQL的用户名,进入MySQL命令行界面。为了防止和其他数据混合在一起,我们可以创建数据库pythondb。



 
  1. mysql> create database pythondb; //创建数据库pythondb
  2. Query OK, 1 row affected (0.01 sec)
  3. mysql> show databases; //显示所有数据库
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | pythondb |
  8. | sparktest |
  9. | sys |
  10. +--------------------+
  11. 3 rows in set (0.01 sec)
  12. mysql> quit //退出MySQL
  13. Bye
mysql

利用模块PyMySQL访问MySQL

这里我们需要利用pip3安装PyMySQL模块来连接MySQL,命令为:

 
  1. 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模块冲突。



 
  1. #引入pymysql模块。注意小写
  2. import pymysql
  3. #打开数据库连接。localhost为主机地址,root是mysql登陆名,123是登陆密码,pythondb是数据库名
  4. conn = pymysql.connect("localhost","root","123","pythondb")
  5. #使用cursor()方法获取操作游标,利用游标来进行相关的数据操作
  6. cursor = conn.cursor()
  7.  
  8. #预定义sql语句。创建student数据库表
  9. create_sql = "create table student(id varchar(8),name varchar(10),age tinyint,sex varchar(2))"
  10. #执行sql语句
  11. cursor.execute(create_sql)
  12.  
  13. try:
  14. #插入语句。%s为占位符
  15. cursor.execute('insert into student values (%s, %s, %s, %s)', ['201701','Tom',20,'M'])
  16. cursor.execute('insert into student values (%s, %s, %s, %s)', ['201702','Mary',22,'W'])
  17. #插入语句。有参sql的另一个传递方式。
  18. #三引号之间输入的内容将被原样保留,可避免繁杂的转义
  19. insert_sql = """insert into student values ('201703','Jack',19,'M')"""
  20. cursor.execute(insert_sql)
  21. #提交到数据库执行,不加commit,则无法提交到数据库
  22. #只有对数据库进行了增删改时需要提交数据库,查询不需要
  23. conn.commit()
  24. except:
  25. #try语句块出错时则回滚
  26. conn.rollback()
  27. #关闭数据连接
  28. conn.close()
Python

执行完成后,接下来检验student表是否创建成功,数据是否插入成功。另外启动一个终端,输入mysql -u root -p进入MySQL命令行界面(root是笔者的MySQL登陆名)。



 
  1. mysql> use pythondb; #切换数据库pythondb
  2. Reading table information for completion of table and column names
  3. You can turn off this feature to get a quicker startup with -A
  4.  
  5. Database changed
  6. mysql> show tables; #显示当前数据库所有表。创建student表成功
  7. +--------------------+
  8. | Tables_in_pythondb |
  9. +--------------------+
  10. | student |
  11. +--------------------+
  12. 1 row in set (0.00 sec)
  13.  
  14. mysql> select * from student; #查询数据。插入数据成功
  15. +--------+------+------+------+
  16. | id | name | age | sex |
  17. +--------+------+------+------+
  18. | 201701 | Tom | 20 | M |
  19. | 201702 | Mary | 22 | W |
  20. | 201703 | Jack | 19 | M |
  21. +--------+------+------+------+
  22. 3 rows in set (0.01 sec)
mysql

输出的结果显示利用PyMySQL模块访问MySQL实验成功!

利用支持Python的MySQL驱动包

实际上,上述PyMySQL模块也是对mysql连接做了一层封装,本质上也是使用的MySQL驱动包。接下来介绍更基础的方法。
首先,安装支持Python的MySQL驱动包。

 
  1. pip3 install mysql-connector-python --allow-external mysql-connector-python
Shell 命令

接下来,编程实现读取sutdent表中的数据,以及删除指定数据。



 
  1. #导入MySQL驱动
  2. import mysql.connector
  3. #建立连接。提供mysql登陆名,登陆密码,连接的数据库名
  4. conn = mysql.connector.connect(user='root',password='123',database='pythondb')
  5. #获取游标
  6. cursor = conn.cursor()
  7. #查询语句
  8. select_sql = """select * from student where id = '201702'"""
  9. #执行语句
  10. cursor.execute(select_sql)
  11. #读取游标所指的所有数据
  12. #常用的还有cursor.fetchone():可返回一条数据
  13. data = cursor.fetchall()
  14. #打印数据
  15. print(data)
  16. try:
  17. #删除语句
  18. delete_sql = """delete from student where id = '201702'"""
  19. cursor.execute(delete_sql)
  20. #操作提交
  21. conn.commit()
  22. except:
  23. #出错时回滚
  24. conn.rollback()
  25. #关闭连接
  26. conn.close()
Python

执行完成后,屏幕上会输出id = '201702'的学生信息,如下:

[('201702', 'Mary', 22, 'W')]

查看另一个终端的MySQL命令行界面,可看出id = '201702'的学生信息已被成功删除。如下:



 
  1. mysql> select * from student;
  2. +--------+------+------+------+
  3. | id | name | age | sex |
  4. +--------+------+------+------+
  5. | 201701 | Tom | 20 | M |
  6. | 201703 | Jack | 19 | M |
  7. +--------+------+------+------+
  8. 2 rows in set (0.00 sec)
mysql

输出的结果显示利用支持Python的MySQL驱动访问MySQL实验成功!

总结

本文通过两种方式访问MySQL数据库,一是通过PyMySQL模块,二是通过支持Python的MySQL驱动。两种方式都是很常用的,大家可二者择一。

你可能感兴趣的:(python)