如何在 Ubuntu 18.04 上使用 Python 在 MariaDB 中存储和检索数据

作者选择了 技术教育基金作为 写给捐款计划的一部分接受捐款。

介绍

MariaDB是流行的MySQL关系数据库管理系统(DBMS)的开源版本,具有访问和管理数据的SQL接口。它非常可靠和易于管理,这是DBMS能够服务现代应用的必不可少的品质。

在本教程中,您将使用MySQL连接器将Python应用程序连接到数据库服务器。本模块允许您从应用程序内部对数据库服务器进行查询。

前提条件

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

步骤1 - 准备和安装

在此步骤中,您将在 MariaDB 中创建数据库和表。

首先,打开终端,并使用以下命令从终端输入MariaDB壳:

1sudo mysql

在本教程中,你将写Python连接到一个名为工作场所的示例员工数据库和一个名为员工的表。

开始创建工作场所数据库:

1CREATE DATABASE workplace;

接下来,告诉 MariaDB 将工作场所作为当前数据库:

1USE workplace;

您将收到以下输出,这意味着您执行的每个查询将在工作场所数据库中生效:

1[secondary_label Output]
2Database changed

接下来,创建员工表:

1CREATE TABLE employees (first_name CHAR(35), last_name CHAR(35));

在表格中,参数first_namelast_name被指定为最大长度为35的字符串(CHAR).

接下来,输出 MariaDB 壳:

1exit;

回到终端,将 MariaDB 授权凭据导出为环境变量:

1export username="username"
2export password="password"

此技术允许您避免在脚本中添加简单文本的凭证。

您已经为该项目设置了环境,接下来,您将开始编写脚本并连接到您的数据库。

步骤 2 – 连接到您的数据库

在此步骤中,您将安装 MySQL 连接器并设置数据库。

在您的终端中,运行以下命令来安装连接器:

1pip3 install mysql-connector-python

「pip」是 Python 的标准包管理器,而「mysql-connector-python」是 Python 数据库连接器模块。

成功安装连接器后,创建并打开新的 Python 文件:

1nano database.py

在打开的文件中,使用导入关键字导入 the os modulemysql.connector 模块:

1[label database.py]
2import os
3import mysql.connector as database

这里的as关键字意味着在代码的其余部分中,mysql.connector将被称为数据库

接下来,将您导出的授权凭证作为Python变量进行初始化:

1[label database.py]
2. . .
3username = os.environ.get("username")
4password = os.environ.get("password")

使用数据库提供的connect()方法来跟踪并建立数据库连接,该方法采用一系列命名的参数来指定您的客户端凭证:

1[label database.py]
2. . .
3connection = database.connect(
4    user=username,
5    password=password,
6    host=localhost,
7    database="workplace")

您声明一个名为连接的变量,该变量将调用到database.connect()方法中。在该方法中,您将值分配给用户,密码,主机数据库参数。对于用户和密码,您将引用您的MariaDB授权凭据。如果您在同一系统上运行数据库,主机将默认为本地主机

最后,在连接上调用 cursor() 方法以获取数据库路由器:

1[label database.py]
2. . .
3cursor = connection.cursor()

_cursor 是一个数据库对象,从数据集中获取并同时更新数据。

让你的文件打开下一步。

现在你可以用你的身份证连接到MariaDB;接下来,你会使用你的脚本添加数据库的条目。

步骤三:添加数据

在数据库路由器上使用执行()方法,您将在此步骤中添加数据库的条目。

定义一个函数 add_data() 以接受员工的第一名和最后名称作为参数. 在函数中,创建试用除区块。

 1[label database.py]
 2. . .
 3def add_data(first_name, last_name):
 4    try:
 5        statement = "INSERT INTO employees (first_name,last_name) VALUES (%s, %s)"
 6        data = (first_name, last_name)
 7        cursor.execute(statement, data)
 8        connection.commit()
 9        print("Successfully added entry to database")
10    except database.Error as e:
11        print(f"Error adding entry to database: {e}")

您使用试用除外块来捕捉和处理扰乱程序执行的正常流程的例外(事件或错误)。

试用块中,您将陈述声明为包含您的INSERT SQL 陈述的变量,该陈述告诉 MariaDB 将first_namelast_name列添加到列中。

代码语法接受数据作为参数,从而减少 SQL 注入的可能性. 具有参数的准备陈述确保只有给定的参数才能按预期安全传输到数据库。

接下来,您将数据声明为 tuple 以从add_data函数中获得的参数。 通过通过 SQL 语句和数据来运行execute() 对象。

最后,如果成功,您会打印成功消息。

例外块中,只有在有例外时才执行,您将database.Error声明为e。这个变量将包含有关例外类型或脚本破坏时发生的事件的信息。

将数据添加到数据库后,您将下一步想要检索它,下一步将带您通过检索数据的过程。

步骤4:恢复数据

在此步骤中,您将在 Python 代码中编写一个 SQL 查询,从您的数据库中获取数据。

使用数据库路由器上相同的 execute() 方法,您可以检索数据库条目。

定义一个函数 get_data() 以接受员工的姓名作为一个参数,您将使用 execute() 方法与 SQL 查询 SELECT 调用,以查找准确的行:

 1[label database.py]
 2. . .
 3def get_data(last_name):
 4    try:
 5      statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s"
 6      data = (last_name,)
 7      cursor.execute(statement, data)
 8      for (first_name, last_name) in cursor:
 9        print(f"Successfully retrieved {first_name}, {last_name}")
10    except database.Error as e:
11      print(f"Error retrieving entry from database: {e}")

试用块中,您将陈述宣布为包含您的SELECTSQL陈述的变量,该陈述告诉MariaDB在匹配特定姓名时从员工表中获取first_namelast_name列。

再次,您使用参数来减少 SQL 注射的机会。

微笑的最后一个函数,你声明数据作为一个tuple与last_name随后一个字节。 继续运行execute()方法在cursor对象通过 SQL 陈述和数据。 使用一个 for 循环,你重复通过返回的元素在指示器,然后打印如果有任何成功的匹配。

除外块中,只有在存在例外时才能执行,请将database.Error声明为e。这个变量将包含有关发生的例外类型的信息。

在最后一步中,您将通过调用定义的函数来执行脚本。

步骤5 - 运行你的脚本

在此步骤中,您将写下最终的代码,使您的脚本可执行,并从您的终端运行。

用样本数据(字符串)调用add_data()get_data()来验证您的代码是否按预期工作。

如果您想添加多个条目,您可以拨打add_data()以添加您选择的其他样本名称。

完成数据库工作后,请确保关闭连接以避免浪费资源: connection.close():

 1[label database.py]
 2import os
 3import mysql.connector as database
 4
 5username = os.environ.get("username")
 6password = os.environ.get("password")
 7
 8connection = database.connect(
 9    user=username,
10    password=password,
11    host=localhost,
12    database="workplace")
13
14cursor = connection.cursor()
15
16def add_data(first_name, last_name):
17    try:
18    statement = "INSERT INTO employees (first_name,last_name) VALUES (%s, %s)"
19    data = (first_name, last_name)
20      cursor.execute(statement, data)
21    cursor.commit()
22    print("Successfully added entry to database")
23    except database.Error as e:
24    print(f"Error adding entry to database: {e}")
25
26def get_data(last_name):
27    try:
28      statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s"
29      data = (last_name,)
30      cursor.execute(statement, data)
31      for (first_name, last_name) in cursor:
32        print(f"Successfully retrieved {first_name}, {last_name}")
33    except database.Error as e:
34      print(f"Error retrieving entry from database: {e}")
35
36add_data("Kofi", "Doe")
37get_data("Doe")
38
39connection.close()

确保您正确输入了代码,以避免错误。

在相同的目录中,你创建了 database.py 文件,运行你的脚本:

1python3 ./database.py

您将获得以下输出:

1[secondary_label Output]
2Successfully added entry to database
3Successfully retrieved Kofi, Doe

最后,返回 MariaDB 以确认您已成功添加了您的条目。

从您的终端打开 MariaDB 提示:

1sudo mysql

接下来,告诉 MariaDB 切换到并使用工作场所数据库:

1USE workplace;

收到成功消息数据库更改后,继续查询员工表中的所有条目:

1SELECT * FROM employees;

你的输出将是相似的如下:

1[secondary_label Output]
2+------------+-----------+
3| first_name | last_name |
4+------------+-----------+
5| Kofi       | Doe       |
6+------------+-----------+
71 row in set (0.00 sec)

把所有这些都放在一起,你已经编写了一个脚本,它会从MariaDB数据库中保存和检索信息。

您开始通过导入所需的库。 您使用mysql-connector连接到数据库,并使用os从环境中获取授权凭据。 在数据库连接上,您获取了引导器来执行查询,并将代码结构化为add_dataget_data函数。 使用您的函数,您将数据插入并从数据库中获取数据。

如果您想要实施删除,您可以用必要的声明、陈述和呼叫来构建类似的函数。

结论

您已成功地使用Python脚本在Ubuntu 18.04上建立了与MariaDB的数据库连接,从这里开始,您可以在您需要在数据库中存储数据的任何Python项目中使用类似的代码。

有关如何使用 Python 完成项目的更多信息,请参阅其他社区教程在 Python

Published At
Categories with 技术
comments powered by Disqus