Python連接MySQL數(shù)據(jù)庫(kù)的四種方法
前言
用 Python 連接到 MySQL 數(shù)據(jù)庫(kù)的方法不是很系統(tǒng),實(shí)際中有幾種不同的連接方法,而且不是所有的方法都能與不同的操作系統(tǒng)很好地配合。除此之外,啟用SSL也是一個(gè)挑戰(zhàn)。
本文涵蓋了四種方法,你可以用它們來(lái)連接你的Python應(yīng)用程序和MySQL。這些例子將使用PlanetScale,一個(gè)用于MySQL的無(wú)服務(wù)器數(shù)據(jù)庫(kù)平臺(tái)。
本文將涵蓋以下連接方法:
mysqlclient
mysql-connector-python
PyMySQL
aiomysql
設(shè)置PlanetScale
如果你需要一個(gè)免費(fèi)的數(shù)據(jù)庫(kù)來(lái)測(cè)試你的連接,PlanetScale是一個(gè)很好的選擇。PlanetScale建立在Vitess之上,為你提供一個(gè)熟悉的工作流程分支來(lái)測(cè)試和部署不同模式。
Vitess建于2010年,用于解決YouTube的擴(kuò)展問(wèn)題。從那時(shí)起,這個(gè)開(kāi)源項(xiàng)目持續(xù)增長(zhǎng),現(xiàn)在幫助一些公司,如Slack和Square處理他們的大規(guī)模數(shù)據(jù)擴(kuò)展需求。
你可以從下面注冊(cè)一個(gè)賬戶,獲得一個(gè)免費(fèi)的5GB數(shù)據(jù)庫(kù)。
https://auth.planetscale.com/sign-up
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)
當(dāng)你進(jìn)入PlanetScale的儀表板。
在你的組織概覽儀表板上點(diǎn)擊 “創(chuàng)建新數(shù)據(jù)庫(kù)”。
給你的數(shù)據(jù)庫(kù)起個(gè)名字。
從下拉菜單中選擇一個(gè)區(qū)域。
點(diǎn)擊創(chuàng)建數(shù)據(jù)庫(kù)。
你的數(shù)據(jù)庫(kù)將被創(chuàng)建為一個(gè)主要的開(kāi)發(fā)分支。你可以在這里進(jìn)行模式修改,一旦你準(zhǔn)備好了,就可以把它推廣到生產(chǎn)中。
獲取連接憑證
要生成連接憑證,必須做到以下步驟:
在你的數(shù)據(jù)庫(kù)概覽頁(yè)面上點(diǎn)擊 “連接”。
從 "連接方式 "下拉菜單中選擇 “Python”。
將憑證復(fù)制到你的Python應(yīng)用程序文件夾中的
.env
文件。
為了確保連接的安全性,PlanetScale使用了來(lái)自證書(shū)頒發(fā)機(jī)構(gòu)(CA)的證書(shū),它是幾乎所有平臺(tái)上的系統(tǒng)根的一部分。當(dāng)連接到數(shù)據(jù)庫(kù)時(shí),你必須指定你信任的CA證書(shū)的路徑。注意,這個(gè)路徑取決于你的平臺(tái)。這里有一個(gè)跨越各種操作系統(tǒng)和發(fā)行版的常見(jiàn)路徑列表。
https://planetscale.com/docs/concepts/secure-connections#ca-root-configuration
如果你從PlanetScale儀表板上復(fù)制了證書(shū),你已經(jīng)完成這一步,因?yàn)镻lanetScale會(huì)自動(dòng)檢測(cè)你的操作系統(tǒng)。
如果你使用的是Windows系統(tǒng),你需要下載根證書(shū),然后用你所使用的驅(qū)動(dòng)程序的正確配置選項(xiàng)指向它們的位置。
用mysqlclient連接到MySQL
mysqlclient包是用于MySQL的最流行的Python包之一。它包含MySQLdb模塊,一個(gè)提供Python數(shù)據(jù)庫(kù)API的MySQL接口。
首先安裝mysqlclient。你可以通過(guò)兩種方式來(lái)完成這件事。
使用來(lái)自MySQL官方網(wǎng)站的安裝程序,它與你正在運(yùn)行的操作系統(tǒng)和SQL版本相匹配。
使用 pip 來(lái)安裝它。
pip install mysqlclient
在Linux上,你可能需要在安裝mysqlclient之前安裝Python3和MySQL開(kāi)發(fā)頭文件和庫(kù)。
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
一旦你安裝了mysqlclient,你可以使用下面的代碼連接到數(shù)據(jù)庫(kù)。
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 并導(dǎo)入 os 模塊以訪問(wèn).env 文件中的數(shù)據(jù)庫(kù)憑證。
Windows用戶要注意,從wheel輪子文件中安裝的mysqlclient不支持ssl模式。由于你想確保數(shù)據(jù)庫(kù)連接是安全的,我們建議使用另一個(gè)驅(qū)動(dòng),比如mysql-connector-python。
這個(gè)例子使用連接來(lái)獲取數(shù)據(jù)庫(kù)的SQL版本,然后關(guān)閉連接。
其余的連接方法的語(yǔ)法與這個(gè)例子幾乎相同。這種類(lèi)似的語(yǔ)法源于 Python 數(shù)據(jù)庫(kù) API 規(guī)范 (PEP 249),它鼓勵(lì)用于訪問(wèn)數(shù)據(jù)庫(kù)的 Python 模塊之間的一致性。
用MySQL connector連接到MySQL
MySQL connector/Python模塊是Oracle支持的官方驅(qū)動(dòng),用于通過(guò)Python連接MySQL。該連接器完全是Python語(yǔ)言,而mysqlclient是用C語(yǔ)言編寫(xiě)的。它也是獨(dú)立的,意味著它不需要MySQL客戶端庫(kù)或標(biāo)準(zhǔn)庫(kù)以外的任何Python模塊。
注意,MySQL Connector/Python不支持舊的MySQL服務(wù)器認(rèn)證方法,這意味著4.1之前的MySQL版本不能工作。
首先安裝mysql-connector-python模塊。建議使用pip來(lái)安裝它。
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包是另一個(gè)連接器,你可以用它來(lái)連接Python和MySQL。如果你追求速度,這是一個(gè)很好的選擇,因?yàn)樗萴ysql-connector-python快。
你可以使用 pip 來(lái)安裝它。
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庫(kù)用于從asyncio框架訪問(wèn)MySQL數(shù)據(jù)庫(kù)。除了是異步的特性之外,連接代碼與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())
總結(jié)
在數(shù)據(jù)庫(kù)中保存數(shù)據(jù)是應(yīng)用程序的共同特征之一。像Python一樣,大多數(shù)編程語(yǔ)言支持與不同數(shù)據(jù)庫(kù)的連接和交互。
本教程探討了Python與MySQL的連接。我們分享了可以使用的四種不同的常用連接方法,并在PlanetScale數(shù)據(jù)庫(kù)上使用SSL對(duì)它們進(jìn)行了測(cè)試,這是一個(gè)關(guān)鍵的步驟,因?yàn)樗梢苑乐怪虚g人攻擊。我們回顧了每個(gè)連接方式的連接器是如何工作的,并展示了運(yùn)行它所需的代碼?,F(xiàn)在你已經(jīng)完成了這個(gè)實(shí)踐概述,你已經(jīng)準(zhǔn)備好將MySQL數(shù)據(jù)庫(kù)連接到Python應(yīng)用程序中了。
以上就是Python連接MySQL數(shù)據(jù)庫(kù)的四種方法的詳細(xì)內(nèi)容,更多關(guān)于Python連接MySQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python 3.6 tkinter+urllib+json實(shí)現(xiàn)火車(chē)車(chē)次信息查詢(xún)功能
這篇文章主要介紹了python 3.6 tkinter+urllib+json 火車(chē)車(chē)次信息查詢(xún)功能,本文以查詢(xún)火車(chē)車(chē)次至南京的信息為例,需要的朋友可以參考下2017-12-12python編程調(diào)用設(shè)備串口發(fā)送數(shù)據(jù)方式
這篇文章主要介紹了python編程調(diào)用設(shè)備串口發(fā)送數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09PyCharm vs VSCode,作為python開(kāi)發(fā)者,你更傾向哪種IDE呢?
這篇文章主要介紹了PyCharm和vscode作為python ide的優(yōu)劣,幫助你選擇適合自己的ide,感興趣的朋友可以了解下2020-08-08Python中如何使用多線程優(yōu)化For循環(huán)
這篇文章主要為大家詳細(xì)介紹了在Python中如何使用多線程實(shí)現(xiàn)優(yōu)化For循環(huán),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01Python自動(dòng)化運(yùn)維和部署項(xiàng)目工具Fabric使用實(shí)例
Fabric是一個(gè)Python庫(kù),只要目標(biāo)機(jī)器支持ssh訪問(wèn),就可以借助fabric來(lái)進(jìn)行遠(yuǎn)程操作(如在host1上對(duì)host2遠(yuǎn)程運(yùn)行shell命令),顯然,由于fabric是個(gè)Python package,故其它Python package都可以被import到fabric特有的fabfile.py腳本中2016-09-09