平安建設(shè)宣傳音頻免費(fèi)下載網(wǎng)站微網(wǎng)站建站平臺(tái)
文章目錄
- 一、概述
- 二、Python 連接數(shù)據(jù)源
- 1)Python MySQL 基礎(chǔ)操作
- 1、部署MySQL
- 2、MySQL Connector 庫(kù)
- 【1】安裝 mysql-connector-python 庫(kù)
- 【2】連接 MySQL
- 【3】增加數(shù)據(jù)
- 【4】查詢數(shù)據(jù)
- 【5】更新數(shù)據(jù)
- 【6】刪除數(shù)據(jù)
- 2、PyMySQL 庫(kù)
- 【1】安裝 PyMySQL 庫(kù)
- 【2】連接 MySQL
- 【3】增加數(shù)據(jù)
- 【4】查詢數(shù)據(jù)
- 【5】更新數(shù)據(jù)
- 【6】更新數(shù)據(jù)
- 2)Python Redis 基礎(chǔ)操作
- 1、部署 Redis
- 2、Python Redis 基本操作
- 【1】安裝 Redis 客戶端庫(kù)
- 【2】連接 Redis
- 【3】設(shè)置鍵值對(duì)
- 【4】獲取鍵值對(duì)
- 【5】刪除鍵
- 【6】判斷鍵是否存在
- 【7】設(shè)置過期時(shí)間
- 【8】自增和自減
- 三、郵件功能
- 1)開通郵箱服務(wù)功能
- 1、郵件協(xié)議介紹
- 2、QQ郵箱開啟郵件服務(wù)設(shè)置
- 3、163郵箱開啟郵件服務(wù)設(shè)置
- 2)Python 郵件示例講解
一、概述
連接數(shù)據(jù)源和郵件發(fā)送和郵件接收也是在項(xiàng)目中很常見的功能,數(shù)據(jù)量小的話,可以存在MySQL、Redis、PostgreSQL 等等,數(shù)據(jù)量大的話,就可以考慮大型分布式高可用存儲(chǔ)數(shù)據(jù)庫(kù)系統(tǒng)例如:Hadoop、StarRocks、ClickHouse等等。郵件發(fā)送一般用于通知,像告警通知,下單通知,支付通知等等。
二、Python 連接數(shù)據(jù)源
1)Python MySQL 基礎(chǔ)操作
Python是一種流行的編程語言,而MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。Python中有許多不同的MySQL庫(kù)可供使用,其中一些最常用的庫(kù)包括:
MySQL Connector
——這是MySQL官方提供的Python庫(kù),可以在Python 2.7和Python 3.x中使用。它提供了與MySQL數(shù)據(jù)庫(kù)的連接和交互的API,并支持多種操作系統(tǒng)。PyMySQL
——這是一個(gè)純Python實(shí)現(xiàn)的MySQL客戶端庫(kù),可以在Python 2.7和Python 3.x中使用。它提供了一種簡(jiǎn)單而直接的方法來連接到MySQL服務(wù)器,并執(zhí)行查詢和其他操作。
1、部署MySQL
MySQL的介紹和部署可以參考我以下幾篇文章:
- 面試寶典之——Mysql
- MySQL高可用實(shí)戰(zhàn)( MHA)
- 【云原生】MySQL on k8s 環(huán)境部署
2、MySQL Connector 庫(kù)
Python 通過 MySQL Connector 模塊提供了訪問 MySQL 數(shù)據(jù)庫(kù)的能力,可以通過該模塊使用一系列的函數(shù)來進(jìn)行數(shù)據(jù)庫(kù)操作。
下面是一些常用的 Python MySQL 函數(shù):
-
connect()
:用于連接 MySQL 數(shù)據(jù)庫(kù),返回一個(gè)連接對(duì)象。 -
cursor()
:用于創(chuàng)建一個(gè)游標(biāo)對(duì)象,該對(duì)象用于執(zhí)行查詢語句和讀取數(shù)據(jù)。 -
execute()
:用于執(zhí)行 SQL 語句,返回受影響的行數(shù)。 -
fetchone()
:用于獲取結(jié)果集中的下一行數(shù)據(jù)。 -
fetchall()
:用于獲取結(jié)果集中的所有數(shù)據(jù)。 -
commit()
:用于提交事務(wù)。 -
rollback()
:用于回滾事務(wù)。 -
close()
:用于關(guān)閉連接。
以下是使用MySQL Connector進(jìn)行連接和增刪改查的演示示例。
【1】安裝 mysql-connector-python 庫(kù)
首先,需要安裝mysql-connector-python
庫(kù):
pip install mysql-connector-python
【2】連接 MySQL
要進(jìn)行數(shù)據(jù)庫(kù)操作,需要先連接MySQL數(shù)據(jù)庫(kù)。連接MySQL數(shù)據(jù)庫(kù)的代碼如下:
import mysql.connector# 連接到MySQL服務(wù)器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()# 關(guān)閉連接
mycursor.close()
conn.close()
在連接數(shù)據(jù)庫(kù)時(shí)需要替換host
、user
、password
和database
為相應(yīng)的值。
【3】增加數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 INSERT INTO
語句,將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中。以下是一個(gè)示例:
import mysql.connector# 連接到MySQL服務(wù)器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)conn.commit()print(mycursor.rowcount, "record inserted.")# 關(guān)閉連接
mycursor.close()
conn.close()
在這個(gè)例子中,將一條記錄插入到名為"customers"的表中。通過將數(shù)據(jù)作為元組傳遞給execute()方法,將值插入到占位符中。最后,需要使用commit()
方法提交更改。
【4】查詢數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 SELECT
語句,查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import mysql.connector# 連接到MySQL服務(wù)器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()mycursor.execute("SELECT * FROM customers")myresult = mycursor.fetchall()for x in myresult:print(x)# 關(guān)閉連接
mycursor.close()
conn.close()
在這個(gè)例子中,從名為"customers"的表中選擇所有記錄,并使用fetchall()
方法將結(jié)果存儲(chǔ)在變量myresult中。最后,使用循環(huán)打印每個(gè)記錄。
【5】更新數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 UPDATE
語句,更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import mysql.connector# 連接到MySQL服務(wù)器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) affected")# 關(guān)閉連接
cursor.close()
conn.close()
在這個(gè)例子中,將名為"customers"的表中地址為"Highway 21"的記錄的地址更新為"Canyon 123"。
【6】刪除數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 DELETE
語句,刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import mysql.connector# 連接到MySQL服務(wù)器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "DELETE FROM customers WHERE address = 'Canyon 123'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) deleted")# 關(guān)閉連接
cursor.close()
conn.close()
2、PyMySQL 庫(kù)
Python PyMySQL
是一個(gè)純 Python 實(shí)現(xiàn)的 MySQL 客戶端庫(kù),使用 PyMySQL 可以連接 MySQL 數(shù)據(jù)庫(kù)并執(zhí)行數(shù)據(jù)庫(kù)操作。下面介紹一些 PyMySQL 常用的函數(shù):
-
connect()
:用于連接 MySQL 數(shù)據(jù)庫(kù),返回一個(gè)連接對(duì)象。 -
cursor()
:用于創(chuàng)建一個(gè)游標(biāo)對(duì)象,該對(duì)象用于執(zhí)行查詢語句和讀取數(shù)據(jù)。 -
execute()
:用于執(zhí)行 SQL 語句,返回受影響的行數(shù)。 -
executemany()
:用于執(zhí)行多個(gè) SQL 語句,返回受影響的行數(shù)。 -
fetchone()
:用于獲取結(jié)果集中的下一行數(shù)據(jù)。 -
fetchall()
:用于獲取結(jié)果集中的所有數(shù)據(jù)。 -
fetchmany()
:用于獲取結(jié)果集中指定數(shù)量的數(shù)據(jù)。 -
commit()
:用于提交事務(wù)。 -
rollback()
:用于回滾事務(wù)。 -
close()
:用于關(guān)閉連接。
【1】安裝 PyMySQL 庫(kù)
首先,需要安裝PyMySQL
庫(kù):
pip install PyMySQL
【2】連接 MySQL
要進(jìn)行數(shù)據(jù)庫(kù)操作,需要先連接MySQL數(shù)據(jù)庫(kù)。連接MySQL數(shù)據(jù)庫(kù)的代碼如下:
接下來,連接到MySQL服務(wù)器并執(zhí)行查詢:
import pymysql# 連接到MySQL服務(wù)器
conn = pymysql.connect(host='hostname',port=port,user='username',password='password',db='database_name',charset='utf8'
)# 創(chuàng)建游標(biāo)對(duì)象
mycursor = conn.cursor()
在上面的代碼中,需要將hostname
、port
、username
、password
和database_name
替換為實(shí)際的數(shù)據(jù)庫(kù)連接信息。
【3】增加數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 INSERT INTO 語句,將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中。以下是一個(gè)示例:
import pymysql# 連接數(shù)據(jù)庫(kù)
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 創(chuàng)建游標(biāo)對(duì)象
mycursor = conn.cursor()# 執(zhí)行插入語句
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)# 提交事務(wù)
conn.commit()# 打印插入數(shù)據(jù)的 ID
print(mycursor.lastrowid)# 關(guān)閉連接
cursor.close()
conn.close()
【4】查詢數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 SELECT
語句,查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import pymysql# 連接數(shù)據(jù)庫(kù)
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 創(chuàng)建游標(biāo)對(duì)象
mycursor = conn.cursor()# 執(zhí)行查詢語句
sql = "SELECT * FROM customers"
mycursor.execute(sql)# 獲取結(jié)果集中的所有數(shù)據(jù)
myresult = mycursor.fetchall()# 打印數(shù)據(jù)
for x in myresult:print(x)# 關(guān)閉連接
cursor.close()
conn.close()
【5】更新數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 UPDATE
語句,更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import pymysql# 連接數(shù)據(jù)庫(kù)
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 創(chuàng)建游標(biāo)對(duì)象
mycursor = conn.cursor()# 執(zhí)行更新語句
sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"
mycursor.execute(sql)# 提交事務(wù)
conn.commit()# 打印受影響的行數(shù)
print(mycursor.rowcount)# 關(guān)閉連接
cursor.close()
conn.close()
【6】更新數(shù)據(jù)
可以使用 execute()
函數(shù)執(zhí)行 DELETE
語句,刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下是一個(gè)示例:
import pymysql# 連接數(shù)據(jù)庫(kù)
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 創(chuàng)建游標(biāo)對(duì)象
mycursor = conn.cursor()# 執(zhí)行刪除語句
sql = "DELETE FROM customers WHERE address = 'Canyon 123'"
mycursor.execute(sql)# 提交事務(wù)
conn.commit()# 打印受影響的行數(shù)
print(mycursor.rowcount)# 關(guān)閉連接
cursor.close()
conn.close()
上述代碼演示了如何連接到 MySQL 數(shù)據(jù)庫(kù)、執(zhí)行插入、更新、刪除和查詢操作以及關(guān)閉連接。在實(shí)際應(yīng)用中,還可以使用其他函數(shù)來執(zhí)行復(fù)雜的操作,如連接池、事務(wù)管理等。
2)Python Redis 基礎(chǔ)操作
Redis 是一種基于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息代理。Python 是一種流行的編程語言,提供了一個(gè) Redis 客戶端庫(kù),可以輕松地與 Redis 交互。下面是一些 Python Redis 基本操作的示例。
1、部署 Redis
Redis 的介紹和部署可以參考我以下幾篇文章:
- 面試寶典之——Redis
- Redis原理介紹與環(huán)境部署(主從模式、哨兵模式、集群模式)
- 【云原生】Redis on k8s 編排部署講解與實(shí)戰(zhàn)操作
2、Python Redis 基本操作
【1】安裝 Redis 客戶端庫(kù)
要在 Python 中使用 Redis,需要安裝 Redis 客戶端庫(kù)??梢允褂?pip 工具安裝:
pip install redis
【2】連接 Redis
在 Python 中連接 Redis,需要使用 Redis 客戶端庫(kù)中的 Redis 類??梢允褂靡韵麓a連接到 Redis:
import redisredis_client = redis.Redis(host='localhost', port=6379, db=0)
【3】設(shè)置鍵值對(duì)
可以使用 set
方法設(shè)置鍵值對(duì):
redis_client.set('key', 'value')
也可以使用 mset
方法一次設(shè)置多個(gè)鍵值對(duì):
redis_client.mset({'key1': 'value1', 'key2': 'value2'})
【4】獲取鍵值對(duì)
可以使用 get
方法獲取單個(gè)鍵的值:
value = redis_client.get('key')
print(value)
也可以使用 mget
方法一次獲取多個(gè)鍵的值:
values = redis_client.mget(['key1', 'key2'])
print(values)
【5】刪除鍵
可以使用 delete
方法刪除一個(gè)鍵:
redis_client.delete('key')
也可以使用 delete
方法刪除多個(gè)鍵:
redis_client.delete('key1', 'key2')
【6】判斷鍵是否存在
可以使用 exists
方法判斷一個(gè)鍵是否存在:
exists = redis_client.exists('key')
print(exists)
【7】設(shè)置過期時(shí)間
可以使用 expire
方法設(shè)置一個(gè)鍵的過期時(shí)間(以秒為單位):
redis_client.expire('key', 60)
也可以使用 expireat
方法設(shè)置一個(gè)鍵的過期時(shí)間(以 Unix 時(shí)間戳為單位):
import timeexpire_time = int(time.time()) + 60
redis_client.expireat('key', expire_time)
【8】自增和自減
可以使用 incr
方法對(duì)一個(gè)鍵進(jìn)行自增操作:
redis_client.set('count', 0)
redis_client.incr('count')
也可以使用 decr
方法對(duì)一個(gè)鍵進(jìn)行自減操作:
redis_client.set('count', 10)
redis_client.decr('count')
以上是一些 Python Redis 的基本操作示例,可以根據(jù)具體需要進(jìn)行適當(dāng)修改和調(diào)整。
三、郵件功能
Python 中可以使用標(biāo)準(zhǔn)庫(kù)中的 smtplib
和 email
模塊來發(fā)送和接收電子郵件。
1)開通郵箱服務(wù)功能
1、郵件協(xié)議介紹
SMTP、POP3和IMAP都是電子郵件協(xié)議,用于在計(jì)算機(jī)之間傳遞和接收電子郵件。
-
SMTP(Simple Mail Transfer Protocol)
是用于發(fā)送電子郵件的協(xié)議。它定義了電子郵件如何通過互聯(lián)網(wǎng)發(fā)送,包括如何連接到郵件服務(wù)器、如何驗(yàn)證身份、如何傳輸郵件、如何處理錯(cuò)誤等。 -
POP3(Post Office Protocol version 3)
是用于接收電子郵件的協(xié)議。它定義了電子郵件如何從郵件服務(wù)器下載到本地計(jì)算機(jī)上的電子郵件客戶端。POP3協(xié)議允許用戶下載所有的郵件,但是在本地計(jì)算機(jī)上只保留一份副本。 -
IMAP(Internet Message Access Protocol)
也是用于接收電子郵件的協(xié)議。它定義了電子郵件如何從郵件服務(wù)器下載到本地計(jì)算機(jī)上的電子郵件客戶端。IMAP協(xié)議允許用戶對(duì)郵件進(jìn)行管理和組織,例如在本地計(jì)算機(jī)上創(chuàng)建文件夾來存儲(chǔ)郵件,而不是在郵件服務(wù)器上。這使得IMAP更適合那些需要在多個(gè)設(shè)備上使用電子郵件的用戶。
總之,SMTP、POP3和IMAP是三種不同的協(xié)議,每個(gè)協(xié)議都有其獨(dú)特的作用,使得電子郵件的發(fā)送和接收變得更加便捷和高效。簡(jiǎn)單地說,SMTP管發(fā),POP3/IMAP管收。
POP(Post Office Protocol)和 IMAP(Internet Message Access Protocol)都是電子郵件客戶端和郵件服務(wù)器之間的協(xié)議,但是它們?cè)谔幚黼娮余]件的方式上有一些重要的區(qū)別:
-
工作方式:POP將郵件從郵件服務(wù)器下載到本地計(jì)算機(jī)上的郵件客戶端,然后將郵件從郵件服務(wù)器中刪除,這意味著用戶只能在本地計(jì)算機(jī)上訪問郵件的一份副本;而IMAP將郵件保留在郵件服務(wù)器上,只有在用戶請(qǐng)求訪問郵件時(shí)才會(huì)下載郵件到本地計(jì)算機(jī)上的郵件客戶端。
-
多設(shè)備支持:由于POP只下載郵件的一份副本到本地計(jì)算機(jī)上,因此如果用戶使用多個(gè)設(shè)備(如電腦、平板電腦、智能手機(jī)等)來訪問郵件,則每個(gè)設(shè)備上的郵件客戶端都會(huì)顯示不同的郵件狀態(tài)。而IMAP協(xié)議允許用戶在多個(gè)設(shè)備上訪問郵件,因?yàn)猷]件始終保留在郵件服務(wù)器上。
-
郵件管理:IMAP允許用戶在郵件服務(wù)器上對(duì)郵件進(jìn)行管理,例如創(chuàng)建、刪除和重命名文件夾,標(biāo)記郵件已讀或未讀等。這使得用戶可以輕松地在多個(gè)設(shè)備之間同步郵件狀態(tài)。而POP協(xié)議只是簡(jiǎn)單地下載郵件并刪除它們,不能像IMAP那樣管理郵件。
-
帶寬:由于IMAP只在用戶需要訪問郵件時(shí)才下載郵件,因此它可以節(jié)省帶寬。而POP在每次下載郵件時(shí)都會(huì)占用帶寬,因?yàn)樗螺d所有郵件的一份副本。
總之,IMAP是更先進(jìn)的郵件協(xié)議,可以提供更多的功能和靈活性,特別是對(duì)于那些需要在多個(gè)設(shè)備上訪問郵件的用戶。而POP適合那些只使用單個(gè)設(shè)備訪問郵件的用戶。
2、QQ郵箱開啟郵件服務(wù)設(shè)置
3、163郵箱開啟郵件服務(wù)設(shè)置
最后整理一下郵箱服務(wù)器:
2)Python 郵件示例講解
以下是一個(gè)簡(jiǎn)單的 Python 腳本,演示了如何使用這兩個(gè)模塊來發(fā)送電子郵件。
發(fā)送郵件實(shí)例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header# 設(shè)置郵件參數(shù)
smtp_server = 'smtp.example.com' # 郵件服務(wù)器
from_addr = 'your_email@example.com' # 發(fā)件人郵箱
to_addr = 'recipient_email@example.com' # 收件人郵箱
username = 'your_email@example.com' # 發(fā)件人郵箱賬號(hào)
password = 'your_email_password' # 發(fā)件人郵箱密碼# 構(gòu)建郵件內(nèi)容
msg = MIMEText('Hello, this is a test email sent by Python.', 'plain', 'utf-8')
msg['From'] = Header('Sender Name', 'utf-8')
msg['To'] = Header('Recipient Name', 'utf-8')
msg['Subject'] = Header('Python Test Email', 'utf-8')# 發(fā)送郵件
try:server = smtplib.SMTP(smtp_server, 25)server.login(username, password)server.sendmail(from_addr, to_addr, msg.as_string())server.quit()print("Email sent successfully!")
except smtplib.SMTPException:print("Error: 無法發(fā)送郵件")
接收郵件示例:
import poplib# 設(shè)置郵件參數(shù)
pop_server = 'pop.example.com' # 郵件服務(wù)器
username = 'your_email@example.com' # 郵箱賬號(hào)
password = 'your_email_password' # 郵箱密碼# 連接到郵件服務(wù)器
server = poplib.POP3(pop_server)
server.user(username)
server.pass_(password)# 獲取郵件列表
resp, mails, octets = server.list()
print("Total emails: {}".format(len(mails)))# 獲取最新一封郵件
resp, lines, octets = server.retr(len(mails))
msg_content = b'\n'.join(lines).decode('utf-8')# 解析郵件內(nèi)容
from email.parser import Parser
msg = Parser().parsestr(msg_content)
print("Subject: {}".format(msg['Subject']))
print("From: {}".format(msg['From']))
print("To: {}".format(msg['To']))
print("Content:\n{}".format(msg.get_payload()))
這里的示例代碼僅僅是一個(gè)簡(jiǎn)單的示例,可以根據(jù)具體的需要來修改和擴(kuò)展。在使用示例時(shí),注意修改上面的連接信息哦。
Python 連接數(shù)據(jù)源與郵件功能的講解就先到這里了,有任何疑問歡迎給我留言哦,歡迎點(diǎn)贊、轉(zhuǎn)發(fā)并收藏哦,也可關(guān)注我的公眾號(hào)【大數(shù)據(jù)與云原生技術(shù)分享】進(jìn)行深入交流技術(shù)~