如何在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 上执行查询。

先决条件

在开始本指南之前,您将需要以下内容:

第 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_namelast_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() 方法的调用。 在方法内部,您将值分配给 userpasswordhostdatabase 参数。 对于用户和密码,您将参考您的 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}")

您可以使用 tryexcept 块来捕获和处理破坏正常程序执行流程的异常(事件或错误)。

try 块下,将 statement 声明为保存 INSERT SQL 语句的变量。 该语句告诉 MariaDB 添加到列 first_namelast_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_namelast_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_dataget_data 函数。 使用您的函数,您可以将数据插入数据库并从数据库中检索数据。

如果您希望实现删除,您可以使用必要的声明、语句和调用构建一个类似的函数。

结论

您已在 Ubuntu 18.04 上使用 Python 脚本成功建立了与 MariaDB 的数据库连接。 从这里开始,您可以在任何需要将数据存储在数据库中的 Python 项目中使用类似的代码。 本指南也可能对从 MySQL 开发的其他关系数据库有所帮助。

有关如何使用 Python 完成项目的更多信息,请查看 Python 上的其他社区教程。