4 种 Python 连接 MySQL 数据库的方法

打印 上一主题 下一主题

主题 665|帖子 665|积分 1995

用 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 来安装它。
  1. pip install mysqlclient  
复制代码
在Linux上,你大概必要在安装mysqlclient之前安装Python3和MySQL开发头文件和库。
  1. sudo apt-get install python3-dev default-libmysqlclient-dev build-essential  
复制代码
一旦你安装了mysqlclient,你可以使用下面的代码连接到数据库。
  1. import os  
  2. import MySQLdb # import the MySQLdb module  
  3. from dotenv import load_dotenv  
  4. load_dotenv()  
  5.   
  6. # Create the connection object  
  7. connection = MySQLdb.connect(  
  8.     host=os.getenv("HOST"),  
  9.     user=os.getenv("USERNAME"),  
  10.     passwd=os.getenv("PASSWORD"),  
  11.     db=os.getenv("DATABASE"),  
  12.     ssl_mode="VERIFY_IDENTITY",  
  13.     ssl={  
  14.         'ca': os.getenv("SSL_CERT")  
  15.     }  
  16. )  
  17.   
  18. # Create cursor and use it to execute SQL command  
  19. cursor = connection.cursor()  
  20. cursor.execute("select @@version")  
  21. version = cursor.fetchone()  
  22.   
  23. if version:  
  24.     print('Running version: ', version)  
  25. else:  
  26.     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来安装它。
  1. pip install mysql-connector-python  
复制代码
安装后,使用以下代码连接到MySQL:
  1. import os  
  2. from dotenv import load_dotenv  
  3. from mysql.connector import Error  
  4. import mysql.connector  
  5.   
  6. load_dotenv()  
  7.   
  8. connection = mysql.connector.connect(  
  9. host=os.getenv("HOST"),  
  10. database=os.getenv("DATABASE"),  
  11. user=os.getenv("USERNAME"),  
  12. password=os.getenv("PASSWORD"),  
  13. ssl_ca=os.getenv("SSL_CERT")  
  14. )  
  15.   
  16. try:  
  17.     if connection.is_connected():  
  18.         cursor = connection.cursor()  
  19.     cursor.execute("select @@version ")  
  20.     version = cursor.fetchone()  
  21.     if version:  
  22.         print('Running version: ', version)  
  23.     else:  
  24.         print('Not connected.')  
  25. except Error as e:  
  26.     print("Error while connecting to MySQL", e)  
  27. finally:  
  28.     connection.close()  
复制代码
用PyMySQL连接到MySQL
PyMySQL包是另一个连接器,你可以用它来连接Python和MySQL。假如你追求速度,这是一个很好的选择,由于它比mysql-connector-python快。
你可以使用 pip 来安装它。
  1. pip install PyMySQL  
复制代码
然后,使用以下连接代码。
  1. from dotenv import load_dotenv  
  2. import pymysql  
  3. import os  
  4. load_dotenv()  
  5. connection = pymysql.connect(  
  6.     host=os.getenv("HOST"),  
  7.     database=os.getenv("DATABASE"),  
  8.     user=os.getenv("USERNAME"),  
  9.     password=os.getenv("PASSWORD"),  
  10.     ssl_ca=os.getenv("SSL_CERT")  
  11. )  
  12. cursor = connection.cursor()  
  13. cursor.execute("select @@version ")  
  14. version = cursor.fetchone()  
  15. if version:  
  16.     print('Running version: ', version)  
  17. else:  
  18.     print('Not connected.')  
  19. connection.close()  
复制代码
用aiomysql连接到MySQL
aiomysql库用于从asyncio框架访问MySQL数据库。除了是异步的特性之外,连接代码与PyMySQL相似。注意,使用aiomysql必要Python 3.7以上版本和PyMySQL。
要使用aiomysql,起首要用安装异步模块。
  1. pip install asyncio  
复制代码
然后,用以下方法安装aiomysql。
  1. pip install aiomysql  
复制代码
然后你可以使用以下代码连接到MySQL。
  1. import os  
  2. import asyncio  
  3. import aiomysql  
  4. import ssl  
  5.   
  6. from dotenv import load_dotenv  
  7. load_dotenv()  
  8.   
  9. ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)  
  10. ctx.load_verify_locations(cafile=os.getenv("SSL_CERT"))  
  11.   
  12. loop = asyncio.get_event_loop()  
  13.   
  14. async def connect_db():  
  15.    connection = await aiomysql.connect(  
  16.        host=os.getenv("HOST"),  
  17.        port=3306,  
  18.        user=os.getenv("USERNAME"),  
  19.        password=os.getenv("PASSWORD"),  
  20.        db=os.getenv("DATABASE"),  
  21.        loop=loop,  
  22.        ssl=ctx  
  23.    )  
  24.    cursor = await connection.cursor()  
  25.    await cursor.execute("select @@version")  
  26.    version = await cursor.fetchall()  
  27.    print('Running version: ', version)  
  28.    await cursor.close()  
  29.    connection.close()  
  30. loop.run_until_complete(connect_db())  
复制代码
总结
在数据库中保存数据是应用程序的共同特性之一。像Python一样,大多数编程语言支持与差别数据库的连接和交互。
本教程探讨了Python与MySQL的连接。我们分享了可以使用的四种差别的常用连接方法,并在PlanetScale数据库上使用SSL对它们进行了测试,这是一个关键的步调,由于它可以防止中心人攻击。我们回顾了每个连接方式的连接器是如何工作的,并展示了运行它所需的代码。现在你已经完成了这个实践概述,你已经准备好将MySQL数据库连接到Python应用程序中了。
点击下方安全链接前去获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表