4 种 Python 连接 MySQL 数据库的方法
作者:mmseoamin日期:2024-04-27

用 Python 连接到 MySQL 数据库的方法不是很系统,实际中有几种不同的连接方法,而且不是所有的方法都能与不同的操作系统很好地配合。除此之外,启用SSL也是一个挑战。

本文涵盖了四种方法,你可以用它们来连接你的Python应用程序和MySQL。这些例子将使用PlanetScale,一个用于MySQL的无服务器数据库平台。

本文将涵盖以下连接方法:

  • mysqlclient

  • mysql-connector-python

  • PyMySQL

  • aiomysql

    设置PlanetScale

    如果你需要一个免费的数据库来测试你的连接,PlanetScale是一个很好的选择。PlanetScale建立在Vitess之上,为你提供一个熟悉的工作流程分支来测试和部署不同模式。

    Vitess建于2010年,用于解决YouTube的扩展问题。从那时起,这个开源项目持续增长,现在帮助一些公司,如Slack和Square处理他们的大规模数据扩展需求。

    你可以从下面注册一个账户,获得一个免费的5GB数据库。

    https://auth.planetscale.com/sign-up

    创建一个数据库

    当你进入PlanetScale的仪表板。

    • 在你的组织概览仪表板上点击 “创建新数据库”。

    • 给你的数据库起个名字。

    • 从下拉菜单中选择一个区域。

    • 点击创建数据库。

      你的数据库将被创建为一个主要的开发分支。你可以在这里进行模式修改,一旦你准备好了,就可以把它推广到生产中。

      获取连接凭证

      要生成连接凭证,必须做到以下步骤:

      • 在你的数据库概览页面上点击 “连接”。

      • 从 "连接方式 "下拉菜单中选择 “Python”。

      • 将凭证复制到你的Python应用程序文件夹中的.env文件。

        为了确保连接的安全性,PlanetScale使用了来自证书颁发机构(CA)的证书,它是几乎所有平台上的系统根的一部分。当连接到数据库时,你必须指定你信任的CA证书的路径。注意,这个路径取决于你的平台。这里有一个跨越各种操作系统和发行版的常见路径列表。

        https://planetscale.com/docs/concepts/secure-connections#ca-root-configuration

        如果你从PlanetScale仪表板上复制了证书,你已经完成这一步,因为PlanetScale会自动检测你的操作系统。

        如果你使用的是Windows系统,你需要下载根证书,然后用你所使用的驱动程序的正确配置选项指向它们的位置。

        用mysqlclient连接到MySQL

        mysqlclient包是用于MySQL的最流行的Python包之一。它包含MySQLdb模块,一个提供Python数据库API的MySQL接口。

        首先安装mysqlclient。你可以通过两种方式来完成这件事。

        • 使用来自MySQL官方网站的安装程序,它与你正在运行的操作系统和SQL版本相匹配。

        • 使用 pip 来安装它。

          pip install mysqlclient  
          

          在Linux上,你可能需要在安装mysqlclient之前安装Python3和MySQL开发头文件和库。

          sudo apt-get install python3-dev default-libmysqlclient-dev build-essential  
          

          一旦你安装了mysqlclient,你可以使用下面的代码连接到数据库。

          import os  
          import MySQLdb # import the MySQLdb module  
          from dotenv import load_dotenv  
          load_dotenv()  
            
          # Create the connection object  
          connection = MySQLdb.connect(  
              host=os.getenv("HOST"),  
              user=os.getenv("USERNAME"),  
              passwd=os.getenv("PASSWORD"),  
              db=os.getenv("DATABASE"),  
              ssl_mode="VERIFY_IDENTITY",  
              ssl={  
                  'ca': os.getenv("SSL_CERT")  
              }  
          )  
            
          # Create cursor and use it to execute SQL command  
          cursor = connection.cursor()  
          cursor.execute("select @@version")  
          version = cursor.fetchone()  
            
          if version:  
              print('Running version: ', version)  
          else:  
              print('Not connected.')  
          

          注意,你必须安装 python-dotenv 并导入 os 模块以访问.env 文件中的数据库凭证。

          Windows用户要注意,从wheel轮子文件中安装的mysqlclient不支持ssl模式。由于你想确保数据库连接是安全的,我们建议使用另一个驱动,比如mysql-connector-python。

          这个例子使用连接来获取数据库的SQL版本,然后关闭连接。

          其余的连接方法的语法与这个例子几乎相同。这种类似的语法源于 Python 数据库 API 规范 (PEP 249),它鼓励用于访问数据库的 Python 模块之间的一致性。

          用MySQL connector连接到MySQL

          MySQL connector/Python模块是Oracle支持的官方驱动,用于通过Python连接MySQL。该连接器完全是Python语言,而mysqlclient是用C语言编写的。它也是独立的,意味着它不需要MySQL客户端库或标准库以外的任何Python模块。

          注意,MySQL Connector/Python不支持旧的MySQL服务器认证方法,这意味着4.1之前的MySQL版本不能工作。

          首先安装mysql-connector-python模块。建议使用pip来安装它。

          pip install mysql-connector-python  
          

          安装后,使用以下代码连接到MySQL:

          import os  
          from dotenv import load_dotenv  
          from mysql.connector import Error  
          import mysql.connector  
            
          load_dotenv()  
            
          connection = mysql.connector.connect(  
          host=os.getenv("HOST"),  
          database=os.getenv("DATABASE"),  
          user=os.getenv("USERNAME"),  
          password=os.getenv("PASSWORD"),  
          ssl_ca=os.getenv("SSL_CERT")  
          )  
            
          try:  
              if connection.is_connected():  
                  cursor = connection.cursor()  
              cursor.execute("select @@version ")  
              version = cursor.fetchone()  
              if version:  
                  print('Running version: ', version)  
              else:  
                  print('Not connected.')  
          except Error as e:  
              print("Error while connecting to MySQL", e)  
          finally:  
              connection.close()  
          

          用PyMySQL连接到MySQL

          PyMySQL包是另一个连接器,你可以用它来连接Python和MySQL。如果你追求速度,这是一个很好的选择,因为它比mysql-connector-python快。

          你可以使用 pip 来安装它。

          pip install PyMySQL  
          

          然后,使用以下连接代码。

          from dotenv import load_dotenv  
          import pymysql  
          import os  
          load_dotenv()  
          connection = pymysql.connect(  
              host=os.getenv("HOST"),  
              database=os.getenv("DATABASE"),  
              user=os.getenv("USERNAME"),  
              password=os.getenv("PASSWORD"),  
              ssl_ca=os.getenv("SSL_CERT")  
          )  
          cursor = connection.cursor()  
          cursor.execute("select @@version ")  
          version = cursor.fetchone()  
          if version:  
              print('Running version: ', version)  
          else:  
              print('Not connected.')  
          connection.close()  
          

          用aiomysql连接到MySQL

          aiomysql库用于从asyncio框架访问MySQL数据库。除了是异步的特性之外,连接代码与PyMySQL相似。注意,使用aiomysql需要Python 3.7以上版本和PyMySQL。

          要使用aiomysql,首先要用安装异步模块。

          pip install asyncio  
          

          然后,用以下方法安装aiomysql。

          pip install aiomysql  
          

          然后你可以使用以下代码连接到MySQL。

          import os  
          import asyncio  
          import aiomysql  
          import ssl  
            
          from dotenv import load_dotenv  
          load_dotenv()  
            
          ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)  
          ctx.load_verify_locations(cafile=os.getenv("SSL_CERT"))  
            
          loop = asyncio.get_event_loop()  
            
          async def connect_db():  
             connection = await aiomysql.connect(  
                 host=os.getenv("HOST"),  
                 port=3306,  
                 user=os.getenv("USERNAME"),  
                 password=os.getenv("PASSWORD"),  
                 db=os.getenv("DATABASE"),  
                 loop=loop,  
                 ssl=ctx  
             )  
             cursor = await connection.cursor()  
             await cursor.execute("select @@version")  
             version = await cursor.fetchall()  
             print('Running version: ', version)  
             await cursor.close()  
             connection.close()  
          loop.run_until_complete(connect_db())  
          

          总结

          在数据库中保存数据是应用程序的共同特征之一。像Python一样,大多数编程语言支持与不同数据库的连接和交互。

          本教程探讨了Python与MySQL的连接。我们分享了可以使用的四种不同的常用连接方法,并在PlanetScale数据库上使用SSL对它们进行了测试,这是一个关键的步骤,因为它可以防止中间人攻击。我们回顾了每个连接方式的连接器是如何工作的,并展示了运行它所需的代码。现在你已经完成了这个实践概述,你已经准备好将MySQL数据库连接到Python应用程序中了。

          点击下方安全链接前往获取

          CSDN大礼包:《Python入门&进阶学习资源包》免费分享

          👉Python实战案例👈

          光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

          4 种 Python 连接 MySQL 数据库的方法,外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,第1张

          4 种 Python 连接 MySQL 数据库的方法,图片,第2张

          👉Python书籍和视频合集👈

          观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

          4 种 Python 连接 MySQL 数据库的方法,外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,第3张

          👉Python副业创收路线👈

          4 种 Python 连接 MySQL 数据库的方法,外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,第4张

          这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取

          CSDN大礼包:《Python入门&进阶学习资源包》免费分享

          本文转自网络,如有侵权,请联系删除。