使用 Python 连接到 MySQL

在本文中,我们将讨论如何使用 Python 连接到 MySQL。 Python 是当今使用的最高效和最广泛使用的编程语言之一。 其简单而优雅的语法使其成为新程序员的理想选择,而经验丰富的程序员则享受大量可用模块和功能。

MySQL 是一个强大的基于 SQL 的开源关系数据库管理系统,用于许多软件程序和 Web 服务器。 本文旨在展示如何使用 Python 连接 MySQL 并执行一些基本任务。

为什么使用 Python 连接 MySQL?

您可能会问自己,为什么这些信息很重要? 最好的答案是,这两个组件相得益彰! Python 使用来源信息处理数据的能力是无与伦比的。 MySQL 或 MariaDB 包含可由 Python 操作的数据。 使用这两个因素来增强和互补只会增加它们之间的整体协同作用。

步骤 1. 安装连接器模块

让我们从安装连接器模块开始。 将 MySQL 与 Python 连接的第一步是安装 Pip Python 模块。 如果您还没有安装 pip,可以在 Liquid Web 知识库中找到在多个操作系统下安装 pip 的详细说明。 安装 pip 后,我们需要使用以下命令安装 mysql-connector-python 驱动程序。

root@host:~# pip install mysql-connector-python 
Collecting mysql-connector-python
  Downloading mysql_connector_python-8.0.21-cp27-cp27mu-manylinux1_x86_64.whl (16.0 MB)
     |################################| 16.0 MB 13.7 MB/s 
Collecting protobuf>=3.0.0
  Downloading protobuf-3.12.2-cp27-cp27mu-manylinux1_x86_64.whl (1.3 MB)
     |################################| 1.3 MB 17.0 MB/s 
Requirement already satisfied: setuptools in /usr/local/lib/python2.7/dist-packages (from protobuf>=3.0.0->mysql-connector-python) (44.1.1)
Collecting six>=1.9
  Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: six, protobuf, mysql-connector-python
Successfully installed mysql-connector-python-8.0.21 protobuf-3.12.2 six-1.15.0

在里面 example 上面,pip 检查 mysql-connector-python 驱动程序可能需要的其他模块,然后在必要时安装这些模块。

步骤 2. 导入连接器

下一步是在代码中使用此命令导入 mysql-connector-python 模块。

import mysql.connector

此命令告诉 Python 加载和启用与 MySQL 连接器模块相关和使用的所有函数和对象。

步骤 3. 将 MySQL 连接到服务器

我们的下一步是调用 mysql.connector.connect() 方法来创建与服务器的连接。

import mysql.connector

db = mysql.connector.connect(
	host='localhost',
	user=’username’,
	password=’password’
)

通常,在与 MySQL 数据库通信时,我们使用 MySQLcursor 对象(它是 mysql-connector-python 模块的一部分)。 将此对象视为一种 CLI(命令行界面),我们可以在其中键入用于与服务器交互的 SQL 查询。 这种通信是使用游标方法(cursor = db.cursor())完成的,调用我们在上一步中使用 connect 方法创建的 db 对象:

import mysql.connector

db = mysql.connector.connect(
        host='localhost',
        user=’username’,
        password=’password’'
)

cursor = db.cursor()

db.cursor 对象允许我们执行 SQL 查询。 该查询返回一个对象,我们可以像这样使用 for 循环对其进行迭代。

import mysql.connector

db = mysql.connector.connect(
        host='localhost',
        user=’username’,
        password=’password’'
)

cursor = db.cursor()

cursor.execute("show databases")

for x in cursor:
	print(x)

在之前关于 SQL 视图的知识库教程中设置了一个预先存在的数据库。 它包含有关虚构的股票汽车系列的信息。 使用上面的脚本,结果将如下所示:

# python mysql-test.py 
(u'information_schema',)
(u'races',)
(u'sys',)

我们可以对当前光标使用其他命令(db.cursor()) 与此数据库进行交互。 在这里,我们从同一个数据库中提取表和视图的列表。

import mysql.connector

db = mysql.connector.connect(
        host='localhost',
        user=’username’,
        password='password'
)

cursor = db.cursor()


cursor.execute("use races")
cursor.execute("show tables")
for x in cursor:
        print(x)


The output results look like this.

# python mysql-test.py 
(u'all_finishes',)
(u'drivers',)
(u'finishes',)
(u'race_winners',)
(u'races',)
(u'standings_leader',)
(u'tracks',)

注意:结果前面的“u”表示它是一个Unicode字符串。

使用 MySQL 游标对象插入数据

现在我们可以检索数据库的结构,我们可以使用游标对象来执行其他命令。 有一个部分将赛季的车手插入数据库。 它是通过使用这个 SQL 查询完成的。

insert into drivers (name,car_number) values
  ('Buddy Baker',28),
  ('Dale Earnhardt Jr.',8),
  ('Ricky Rudd',88);

要使用 Python 运行相同的 SQL 查询,我们只需将此字符串传递给光标的执行方法。 练习使用它的一个好方法是分配一个变量作为查询的文本,然后在游标对象上调用执行。 您还必须像这样调用 db.commit() 来指示 mysql 提交更改。

db = mysql.connector.connect(
	host='localhost',
	user=’username’,
	password='password'
)

cursor = db.cursor()
cursor.execute("use races")


query = "insert into drivers (name,car_number) values ('Buddy Baker',28),('Dale Earnhardt Jr.',8),('Ricky Rudd',88);"

cursor.execute(query)

db.commit()

结果:

ID姓名

车号

1巴迪贝克

28

2

小戴尔·恩哈特

8
3

瑞奇·路德

88

当我们插入多行时,该接口提供了“executemany”方法,它允许我们创建一个要插入的值数组和一个特殊格式化的字符串,该字符串用 %s 符号替换数组中的值。 这 example 与之前的插入相同:

db = mysql.connector.connect(
	host='localhost',
	user=’username’,
	password='password'
)

cursor = db.cursor()
cursor.execute("use races")


query = "insert into drivers (name,car_number) values ('Buddy Baker',28),('Dale Earnhardt Jr.',8),('Ricky Rudd',88);"

cursor.execute(query)

db.commit()

数组’drivers’中的值被一一传递给’sql’语句,然后传递给’executemany()’

使用选择

像其他 SQL 语句一样,我们可以使用游标对象来执行选择。 选择之后,游标会获得一些新方法,包括 fetchall() 和 fetchone()。 fetchall() 返回所有结果的列表。 每个结果都是一个列表,其中包含按选择顺序排列的相应列。 fetchone() 方法返回结果集中的下一个结果。

sql = "select name,car_number from drivers"

cursor.execute(sql)

results = cursor.fetchall()

for x in results:
        print(x)

结果:

(u'Buddy Baker', 28)
(u'Dale Earnhardt Jr.', 8)
(u'Ricky Rudd', 88)

如果我们一次想要一个结果,我们可以使用 fetchone()

sql = "select name,car_number from drivers"

cursor.execute(sql)

results = cursor.fetchone()

print(results)

结果:

(u'Buddy Baker', 28)

更新和删除数据

很像插入命令,删除和更新命令使用游标对象并且必须调用 db.commit(); 否则,它们类似于其他 SQL 命令。

更新

sql = "update drivers set car_number = 1 where car_number = 88"
cursor.execute(sql)
db.commit()

sql = "select name,car_number from drivers"

cursor.execute(sql)

results = cursor.fetchall()
for x in results:
        print(x)

(u'Buddy Baker', 28)
(u'Dale Earnhardt Jr.', 8)
(u'Ricky Rudd', 1)

删除

sql = "delete from drivers where car_number = 8"
cursor.execute(sql)
db.commit()

sql = "select name,car_number from drivers"

cursor.execute(sql)

results = cursor.fetchall()
for x in results:
        print(x)

(u'Buddy Baker', 28)
(u'Ricky Rudd', 1)

结论

那么,这篇文章的要点是什么? 使用 Python 与 MySQL 进行交互是一种简单而有效的方式来以补充每个系统的方式操作数据。

有问题吗? 我们以成为 Hosting™ 中最有帮助的人而自豪! 我们的技术支持人员全年 365 天、每周 7 天、每天 24 小时随时可以帮助解决与本文相关的任何问题。

我们可以通过我们的票务系统 [email protected]、电话(800-580-4986)或通过 在线聊天 或您喜欢的任何方法。 我们为您努力工作,以便您可以放松。