使用Python操作MySQL

教你使用Python操作MySQL来提升项目维护效率

Posted by Jeremy Song on 2021-07-27
Estimated Reading Time 6 Minutes
Words 1.3k In Total
Viewed Times

简介

MySQL 因为成本低廉,性能高的优点已经被各大应用所选择使用。在绝大部分的 Web 项目中更是如此。

当前主流的 Web 应用基本都是都是基于 Spring 全家桶开发,这也决定了其开发语言必定是 Java。 但由于 Java JDBC 以及 Java 语言本身的特点。 要使用 Java 代码编辑一段用于维护数据库的过程就显得有点繁琐(java语言需要显式的编译才能运行)。

如果我们能使用一种直接编写完就可以执行(解释执行)的语言来编写维护脚本,那我们不管是调试还是维护都会很方便。

好在 MySQL 提供了很多种语言实现的连接器,例如:Java, Python, JavaScript, C++, C#, C, PHP, ODBC等等。显然,Python 和 JavaScript两种语言可以满足我们的上述需求。

另外,对 Linux Shell 操作熟练者,依旧可以通过命令行的方式直接与 MySQL Client 交互来写出完美的脚本。这里,我们主要使用 Python 语言来说明如何操作数据库。关于其他的
语言的连接器可以从 MySQL Connectors and APIs 获取。

Python连接器版本参考

Connector/Python Version MySQL Server Versions Python Versions Connector Status
8.0 8.0, 5.7, 5.6, 5.5 3.9, 3.8, 3.7, 3.6, (2.7 and 3.5 before 8.0.24) General Availability
2.2 (continues as 8.0) 5.7, 5.6, 5.5 3.5, 3.4, 2.7 Developer Milestone, No releases
2.1 5.7, 5.6, 5.5 3.5, 3.4, 2.7, 2.6 General Availability
2.0 5.7, 5.6, 5.5 3.5, 3.4, 2.7, 2.6 GA, final release on 2016-10-26
1.2 5.7, 5.6, 5.5 (5.1, 5.0, 4.1) 3.4, 3.3, 3.2, 3.1, 2.7, 2.6 GA, final release on 2014-08-22

安装

使用 pip 命令可以在任意操作系统安装,命令如下:

1
shell> pip install mysql-connector-python

如果上述命令不能安装,可以在 Python Connector Download下载编译好的二进制安装包安装。

连接数据库

示例代码1:

1
2
3
4
5
6
import mysql.connector

cnx = mysql.connector.connect(user='scott', password='password',
host='127.0.0.1',
database='employees')
cnx.close()

示例代码2:

1
2
3
4
5
6
from mysql.connector import (connection)

cnx = connection.MySQLConnection(user='scott', password='password',
host='127.0.0.1',
database='employees')
cnx.close()

连接过程中的异常处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import mysql.connector
from mysql.connector import errorcode

try:
cnx = mysql.connector.connect(user='scott',
database='employ')
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cnx.close()

插入数据

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector

cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()

tomorrow = datetime.now().date() + timedelta(days=1)

add_employee = ("INSERT INTO employees "
"(first_name, last_name, hire_date, gender, birth_date) "
"VALUES (%s, %s, %s, %s, %s)")
add_salary = ("INSERT INTO salaries "
"(emp_no, salary, from_date, to_date) "
"VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")

data_employee = ('Geert', 'Vanderkelen', tomorrow, 'M', date(1977, 6, 14))

# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid

# Insert salary information
data_salary = {
'emp_no': emp_no,
'salary': 50000,
'from_date': tomorrow,
'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)

# Make sure data is committed to the database
cnx.commit()

cursor.close()
cnx.close()

查询数据

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import mysql.connector

cnx = mysql.connector.connect(user='root', password='root',
host='127.0.0.1',
database='erp')

cursor = cnx.cursor()

query = "SELECT `id`, role_name FROM MEMBER_ROLES"
cursor.execute(query)
for line in cursor:
print(line)

cursor.execute(query)
for (idx, roleName) in cursor:
print("id = {}, role_name = {}".format(idx, roleName))

query += " limit 1"
cursor.execute(query)
data = cursor.fetchone()
print(data)
print("id = {}, role_name = {}".format(data[0], data[1]))

cursor.close()
cnx.close()

以上代码的输出示例:

1
2
3
4
5
6
7
8
9
10
11
12
(1, '工区长')
(2, '技术主管')
(3, '技术员')
(4, '试验员')
(5, '测量员')
id = 1, role_name = 工区长
id = 2, role_name = 技术主管
id = 3, role_name = 技术员
id = 4, role_name = 试验员
id = 5, role_name = 测量员
(1, '工区长')
id = 1, role_name = 工区长

其他操作

通过上面的示例我们可以看出来,其实所有SQL操作的核心代码为 cursor.execute(sql) 。简化代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
import mysql.connector

cnx = mysql.connector.connect(user='root', password='root',
host='127.0.0.1',
database='erp')

cursor = cnx.cursor()

query = "SELECT col FROM TABLE"
cursor.execute(query)

cursor.close()
cnx.close()

上例中的 query 即我们需要执行的SQL语句,我们根据业务来拼接就可以。

更多操作示例可以参考 Connector/Python Coding Examples

扩展资料

本文上面简单介绍了使用 Python 操作 MySQL的一些示例,在通常的维护场景已经够用了。如果你的项目是Python语言的项目,可能会有更高的要求,比如连接池等等。如有需要可以参考如下文档:


欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !