如何在Ubuntu18.04上使用Python在MariaDB中存储和检索数据
作为 Write for DOnations 计划的一部分,作者选择了 Tech Education Fund 来接受捐赠。
介绍
MariaDB 是流行的 MySQL 关系数据库管理系统 (DBMS) 的开源版本,具有用于访问和管理数据的 SQL 接口。 它高度可靠且易于管理,这是能够为现代应用程序服务的 DBMS 的基本品质。 随着 Python 在人工智能和机器学习等技术中的日益普及,MariaDB 为 Python 的数据库服务器提供了一个不错的选择。
在本教程中,您将使用 MySQL 连接器将 Python 应用程序连接到数据库服务器。 此模块允许您从应用程序中对数据库服务器进行查询。 您将在 Ubuntu 18.04 上为 Python 环境设置 MariaDB,并编写一个 Python 脚本来连接到 MariaDB 并在 MariaDB 上执行查询。
先决条件
在开始本指南之前,您将需要以下内容:
- 按照 Ubuntu 18.04 初始服务器设置指南 设置一台具有至少 1GB RAM 的 Ubuntu 18.04 服务器,包括 sudo 非 root 用户和防火墙。
- Python 安装在您的服务器上。 遵循我们的 如何安装 Python 并设置编程环境 教程。
- MariaDB 安装在您的服务器上。 按照我们的 如何安装 MariaDB 教程。 请务必记下您的授权凭据(用户名和密码),因为您将在本教程后面使用它。
第 1 步 — 准备和安装
在此步骤中,您将在 MariaDB 中创建一个数据库和一个表。
首先,打开您的终端并使用以下命令从终端输入 MariaDB shell:
sudo mysql
一旦你进入 MariaDB shell,你的终端提示就会改变。 在本教程中,您将编写 Python 以连接到名为 workplace
的示例员工数据库和名为 employees
的表。
首先创建 workplace
数据库:
CREATE DATABASE workplace;
接下来,告诉 MariaDB 使用 workplace
作为您当前的数据库:
USE workplace;
您将收到以下输出,这意味着您在此之后运行的每个查询都将在 workplace
数据库中生效:
OutputDatabase changed
接下来,创建 employees
表:
CREATE TABLE employees (first_name CHAR(35), last_name CHAR(35));
在表模式中,参数 first_name
和 last_name
被指定为最大长度为 35
的字符串 (CHAR
)。
在此之后,退出 MariaDB shell:
exit;
回到终端,将您的 MariaDB 授权凭证导出为环境变量:
export username="username" export password="password"
此技术允许您避免在脚本中以纯文本形式添加凭据。
您已经为项目设置了环境。 接下来,您将开始编写脚本并连接到您的数据库。
第 2 步 — 连接到您的数据库
在此步骤中,您将安装 MySQL 连接器 并设置数据库。
在您的终端中,运行以下命令来安装连接器:
pip3 install mysql-connector-python
pip
是 Python 的标准包管理器。 mysql-connector-python
是数据库连接器 Python 模块。
成功安装连接器后,创建并打开一个新文件 Python 文件:
nano database.py
在打开的文件中,使用 import
关键字导入 os 模块 和 mysql.connector
模块:
数据库.py
import os import mysql.connector as database
这里的 as
关键字意味着 mysql.connector
在其余代码中将被引用为 database
。
接下来,初始化您导出为 Python 变量的授权凭证:
数据库.py
. . . username = os.environ.get("username") password = os.environ.get("password")
使用database
提供的connect()
方法跟进并建立数据库连接。 该方法采用一系列命名参数来指定您的客户端凭据:
数据库.py
. . . connection = database.connect( user=username, password=password, host=localhost, database="workplace")
您声明一个名为 connection
的变量,该变量保存对 database.connect()
方法的调用。 在方法内部,您将值分配给 user
、password
、host
和 database
参数。 对于用户和密码,您将参考您的 MariaDB 授权凭证。 如果您在同一系统上运行数据库,则主机默认为 localhost
。
最后在连接上调用cursor()
方法获取数据库游标:
数据库.py
. . . cursor = connection.cursor()
cursor 是一个数据库对象,它从一组数据中检索并更新数据,一次一行。
让您的文件保持打开状态以进行下一步。
现在您可以使用您的凭据连接到 MariaDB; 接下来,您将使用脚本将条目添加到数据库中。
第 3 步 — 添加数据
在数据库光标上使用 execute()
方法,您将在此步骤中将条目添加到数据库中。
定义一个函数 add_data()
以接受员工的名字和姓氏作为参数。 在函数内部,创建一个 try/except 块。 在光标对象之后添加以下代码:
数据库.py
. . . def add_data(first_name, last_name): try: statement = "INSERT INTO employees (first_name,last_name) VALUES (%s, %s)" data = (first_name, last_name) cursor.execute(statement, data) connection.commit() print("Successfully added entry to database") except database.Error as e: print(f"Error adding entry to database: {e}")
您可以使用 try
和 except
块来捕获和处理破坏正常程序执行流程的异常(事件或错误)。
在 try
块下,将 statement
声明为保存 INSERT
SQL 语句的变量。 该语句告诉 MariaDB 添加到列 first_name
和 last_name
。
代码语法接受数据作为减少 SQL 注入机会的参数。 带参数的预处理语句确保只有给定的参数按预期安全地传递到数据库。 参数一般是不可注入的。
接下来,您将 data
声明为 元组 ,并使用从 add_data
函数接收到的参数。 通过传递 SQL 语句和数据,继续在 cursor
对象上运行 execute()
方法。 调用execute()
方法后,在连接上调用commit()
方法永久保存插入的数据。
最后,如果成功,则打印出成功消息。
在 except
块中,它只在出现异常时执行,您将 database.Error
声明为 e
。 此变量将保存有关异常类型或脚本中断时发生的事件的信息。 然后,您继续打印出格式为 e
的错误消息,以使用 f-string 结束块。
将数据添加到数据库后,您接下来要检索它。 下一步将引导您完成检索数据的过程。
第 4 步 — 检索数据
在此步骤中,您将在 Python 代码中编写 SQL 查询以从数据库中检索数据。
在数据库游标上使用相同的 execute()
方法,您可以检索数据库条目。
定义一个函数 get_data()
以接受员工的姓氏作为参数,您将使用 execute()
方法和 SELECT
SQL 查询调用该函数以定位确切的行:
数据库.py
. . . def get_data(last_name): try: statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s" data = (last_name,) cursor.execute(statement, data) for (first_name, last_name) in cursor: print(f"Successfully retrieved {first_name}, {last_name}") except database.Error as e: print(f"Error retrieving entry from database: {e}")
在 try
块下,将 statement
声明为保存 SELECT
SQL 语句的变量。 该语句告诉 MariaDB 在匹配特定姓氏时从 employees
表中检索 first_name
和 last_name
列。
同样,您使用参数来减少 SQL 注入的机会。
与最后一个函数类似,您将 data
声明为一个元组,其中 last_name
后跟一个逗号。 通过传递 SQL 语句和数据,继续在 cursor
对象上运行 execute()
方法。 使用 for 循环 ,您可以遍历游标中返回的元素,然后打印出是否有任何成功的匹配项。
在 except
块中,仅在出现异常时执行,将 database.Error
声明为 e
。 此变量将保存有关发生的异常类型的信息。 然后您继续打印出格式为 e
的错误消息以结束该块。
在最后一步中,您将通过调用定义的函数来执行脚本。
第五步——运行你的脚本
在这一步中,您将编写最后一段代码以使您的脚本可执行并从您的终端运行它。
通过使用示例数据(字符串)调用 add_data()
和 get_data()
来完成您的脚本,以验证您的代码是否按预期工作。
如果您想添加多个条目,您可以调用 add_data()
并使用您选择的更多示例名称。
完成数据库操作后,请确保关闭连接以避免浪费资源:connection.close()
:
数据库.py
import os import mysql.connector as database username = os.environ.get("username") password = os.environ.get("password") connection = database.connect( user=username, password=password, host=localhost, database="workplace") cursor = connection.cursor() def add_data(first_name, last_name): try: statement = "INSERT INTO employees (first_name,last_name) VALUES (%s, %s)" data = (first_name, last_name) cursor.execute(statement, data) cursor.commit() print("Successfully added entry to database") except database.Error as e: print(f"Error adding entry to database: {e}") def get_data(last_name): try: statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s" data = (last_name,) cursor.execute(statement, data) for (first_name, last_name) in cursor: print(f"Successfully retrieved {first_name}, {last_name}") except database.Error as e: print(f"Error retrieving entry from database: {e}") add_data("Kofi", "Doe") get_data("Doe") connection.close()
确保您已正确缩进代码以避免错误。
在同一目录中,您创建了 database.py
文件,运行脚本:
python3 ./database.py
您将收到以下输出:
OutputSuccessfully added entry to database Successfully retrieved Kofi, Doe
最后,返回 MariaDB 以确认您已成功添加条目。
从终端打开 MariaDB 提示符:
sudo mysql
接下来,告诉 MariaDB 切换到并使用 workplace
数据库:
USE workplace;
收到成功消息 Database changed
后,继续查询 employees
表中的所有条目:
SELECT * FROM employees;
您的输出将类似于以下内容:
Output+------------+-----------+ | first_name | last_name | +------------+-----------+ | Kofi | Doe | +------------+-----------+ 1 row in set (0.00 sec)
综上所述,您编写了一个脚本,用于保存和检索 MariaDB 数据库中的信息。
您首先导入了必要的库。 您使用 mysql-connector
连接到数据库并使用 os
从环境中检索授权凭据。 在数据库连接上,您检索游标以执行查询并将您的代码结构化为 add_data
和 get_data
函数。 使用您的函数,您可以将数据插入数据库并从数据库中检索数据。
如果您希望实现删除,您可以使用必要的声明、语句和调用构建一个类似的函数。
结论
您已在 Ubuntu 18.04 上使用 Python 脚本成功建立了与 MariaDB 的数据库连接。 从这里开始,您可以在任何需要将数据存储在数据库中的 Python 项目中使用类似的代码。 本指南也可能对从 MySQL 开发的其他关系数据库有所帮助。
有关如何使用 Python 完成项目的更多信息,请查看 Python 上的其他社区教程。