当前位置: 代码网 > it编程>前端脚本>Python > Python连接MySQL数据库的四种方法

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

2024年08月06日 Python 我要评论
前言用 python 连接到 mysql 数据库的方法不是很系统,实际中有几种不同的连接方法,而且不是所有的方法都能与不同的操作系统很好地配合。除此之外,启用ssl也是一个挑战。本文涵盖了四种方法,你

前言

用 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应用程序中了。

以上就是python连接mysql数据库的四种方法的详细内容,更多关于python连接mysql的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com