如何通过示例了解从 Python 连接到 MySQL 数据库

举报
Tiamo_T 发表于 2021/10/07 08:18:35 2021/10/07
【摘要】 通过 Python 程序,您可以连接到 MySQL 数据库以访问表并操作您的数据。为此,您应该使用 Python MySQL 库之一。虽然这些库很少,但最受欢迎和最稳定的是 mysql-connector-python 库。mysql-connector-python 库使用符合 Python 数据库 API 规范 v2.0 (PEP 249) 的 API。另外,这个库本身是用python程...

通过 Python 程序,您可以连接到 MySQL 数据库以访问表并操作您的数据。

为此,您应该使用 Python MySQL 库之一。虽然这些库很少,但最受欢迎和最稳定的是 mysql-connector-python 库。

mysql-connector-python 库使用符合 Python 数据库 API 规范 v2.0 (PEP 249) 的 API。另外,这个库本身是用python程序编写的,没有任何其他的外部依赖,更容易维护。

本篇介绍了如何安装 mysql-connector-python 库。这里还提供了一个示例 Python 程序,它展示了如何使用 API 连接到 MySQL 数据库并从表中检索数据。

1.安装MySQL连接器

Mysql-connector-python 库可用于所有版本的 Linux,包括 CentOS、Debian、Ubuntu、RedHat。它也可用于 Windows。

在以下示例中,我使用wget 命令直接下载 RPM 文件以将其安装在 CentOS 7 上。


# wget http://cdn.mysql.com//Downloads/Connector-Python/mysql-connector-python-2.1.3-1.el7.x86_64.rpm

接下来,使用rpm 命令安装 mysql-connector-python 库,如下所示。这没有任何其他额外的包依赖项。您只需要这个包。

# rpm -ivh mysql-connector-python-2.1.3-1.el7.x86_64.rpm 
Preparing...         ############# [100%]
Updating / installing...
   1:mysql-connector-python-2.1.3-1.el################# [100%]

2. 验证 Python MySQL 库是否已安装

在以下示例中,此服务器安装了 Python 2.7.5 版本。

# python -V
Python 2.7.5

接下来,使用 get_python_lib 函数获取将安装所有 Python 库的目录位置。在您可以使用 get_python_lib 函数之前,您还应该导入该函数,如下所示。

# python
>>> from distutils.sysconfig import get_python_lib
>>> print get_python_lib() 
/usr/lib/python2.7/site-packages

正如我们从上面的输出中看到的,在这个特定的系统上,python 库安装在 /usr/lib/python2.7/site-packages 目录下。验证我们是否在该目录下获得了 mysql_connector_python 可用,如下所示。

# ls -l /usr/lib/python2.7/site-packages | grep -i mysql
drwxr-xr-x.  3 root root     78 Jun  9 08:14 mysql
-rw-r--r--.  1 root root   1499 Sep 10  2015 mysql_connector_python-2.1.3-py2.7.egg-info

当你从 python 命令行执行任何命令时,不要在命令前留一个空格。如果“print”前面有多余的空格,则会显示“IndentationError:unexpected indent”错误信息。

>>>  print get_python_lib() 
  File "<stdin>", line 1
    print get_python_lib() 
    ^
IndentationError: unexpected indent

此外,如果您尝试执行 get_python_lib 而不导入它,您将看到以下错误消息。

>>> print get_python_lib() 
NameError: name 'get_python_lib' is not defined

3. 验证 Python MySQL 库加载

接下来,让我们确保我们安装的 mysql 库是有效的,并且我们能够毫无问题地导入它。如果下面的 import mysql.connector 没有返回任何错误消息,那么这意味着 python 现在可以访问 mysql 连接器库并导入它而没​​有任何问题。从这一点开始,您可以开始使用任何 MySQL python 库命令并开始使用。

# python
>>> import mysql.connector
>>> exit();

如果出现以下错误,则说明 Python MySQL 库安装出现问题。

>>> import mysql.connector
ImportError: No module named mysql.connector

4.从Python程序连接到MySQL数据库

接下来,让我们编写一个快速的小型 Python 示例程序,该程序将使用用户名和密码连接到特定的 MySQL 数据库。

在以下示例中,此 Python 程序将尝试使用给定的用户名和密码连接到运行在 localhost (127.0.0.1) 上的名为“thegeekstuff”的 MySQL 数据库。

Mysql.connector.connect 是一个 mysql-python 库函数,它将创建这个连接,如下所示。该函数将返回一个连接对象,我们将其存储在“conn”变量中。在我们可以调用任何 mysql 库函数之前,我们应该首先使用“import mysql.connector”导入库,如下例所示。

稍后我们可以使用这个“conn”变量来调用其他 MySQL Python 库函数来操作表数据。最后,我们使用 conn.close(),它将简单地关闭已打开的 MySQL 连接。

# cat con-test.py
import mysql.connector

conn = mysql.connector.connect(
         user='root',
         password='Dev$SQL2Pwd',
         host='127.0.0.1',
         database='thegeekstuff')

conn.close()

如果您尝试连接到在不同服务器上运行的 MySQL 数据库,则相应地更改主机参数中的 ip-address。

如果您如下所示执行上面的示例python程序,如果它没有返回任何错误消息,则表示该程序能够使用给定的用户名和密码成功连接到给定的MySQL数据库。

# python con-test.py
#

如果在建立连接时出现错误,它将抛出如下所示的错误消息。在下面的示例中,它给出了“拒绝访问”错误消息,这意味着给定的用户名和密码组合无效。

# python con-test.py
Traceback (most recent call last):
  File "my.py", line 5, in <module>
    database='test')
  File "/usr/lib/python2.7/site-packages/mysql/connector/__init__.py", line 179, in connect
    return MySQLConnection(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 95, in __init__
    self.connect(**kwargs)
  File "/usr/lib/python2.7/site-packages/mysql/connector/abstracts.py", line 719, in connect
    self._open_connection()
  File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 210, in _open_connection
    self._ssl)
  File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 144, in _do_auth
    self._auth_switch_request(username, password)
  File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 177, in _auth_switch_request
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

5. 从 Python 脚本中检索 MySQL 表记录

下面的例子扩展了上面的python程序。在这个python脚本示例中,它将连接到“thegeekstuff”MySQL数据库,从employee表中检索数据,并显示它。

# cat employee.py 
import mysql.connector

conn = mysql.connector.connect(
         user='root',
         password='Dev$SQL2Pwd',
         host='127.0.0.1',
         database='thegeekstuff')

cur = conn.cursor()

query = ("SELECT * FROM employee")

cur.execute(query)

for (id, name, dept, salary) in cur:
  print("{}, {}, {}, {}".format(id, name,dept,salary))

cur.close()
conn.close()

在上面的示例python程序中:

  • import mysql.connector – 导入 mysql 连接器 python 库。
  • conn = mysql.connector.connect – 使用给定的数据库名称、用户名、密码和主机连接到特定的 MySQL 数据库。这将返回一个连接对象,该对象存储在“conn”变量中。
  • cur = conn.cursor() – 使用我们刚刚创建的连接对象,我们正在创建一个新的游标来检索和操作我们的查询。游标对象将存储在“cur”变量中。
  • query = (“SELECT ... ) – 这里我们定义了我们的 MySQL 查询。在这个例子中,我们只是从员工表中选择所有记录。
  • cur.execute(query) – 使用我们上面创建的“cur”游标变量,我们正在执行给定的查询。由于游标已经绑定到特定连接,因此它确切知道在哪里执行 SQL 查询并获取输出。
  • for (...) in cur - 这个命令只是遍历游标并获取行中的所有值并将它们存储在给定的参数中。由于该表有 4 列,因此在 for 循环内定义了 4 个变量。即 id、姓名、部门和工资。
  • print(“...”.format()) – 这个打印命令在 for 循环内被调用,它只是打印给定变量的值,这些变量是为员工表上的特定行检索的列值。
  • cur.close 和 conn.close - 最后,在 for 循环执行结束后,我们只需关闭游标和我们之前创建的连接。

以下是上述示例 Python 程序的输出,该程序连接到 MySQL 数据库并从给定表中检索行。

# python employee.py
100, Thomas, Sales, 5000
200, Jason, Technology, 5500
300, Mayla, Technology, 7000
400, Nisha, Marketing, 9500
500, Randy, Technology, 6000
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。