前言
TDSQL-C MySQL 版(TDSQL-C for MySQL)是騰訊云自研的新一代云原生關(guān)系型數(shù)據(jù)庫。融合了傳統(tǒng)數(shù)據(jù)庫、云計算與新硬件技術(shù)的優(yōu)勢,為用戶提供具備高彈性、高性能、海量存儲、安全可靠的數(shù)據(jù)庫服務。TDSQL-C MySQL 版100%兼容 MySQL 5.7、8.0。實現(xiàn)超百萬級 QPS 的高吞吐,最高 PB 級智能存儲,保障數(shù)據(jù)安全可靠。
TDSQL-C MySQL 版采用存儲和計算分離的架構(gòu),所有計算節(jié)點共享一份數(shù)據(jù),提供秒級的配置升降級、秒級的故障恢復,單節(jié)點可支持百萬級 QPS,自動維護數(shù)據(jù)和備份,最高以GB/秒的速度并行回檔。
TDSQL-C MySQL 版既融合了商業(yè)數(shù)據(jù)庫穩(wěn)定可靠、高性能、可擴展的特征,又具有開源云數(shù)據(jù)庫簡單開放、高效迭代的優(yōu)勢。TDSQL-C MySQL 版引擎完全兼容原生 MySQL,您可以在不修改應用程序任何代碼和配置的情況下,將 MySQL 數(shù)據(jù)庫遷移至 TDSQL-C MySQL 版引擎。
本篇文章我們將一步一步的實現(xiàn) 使用 Python 向 TDSQL-C 添加讀取數(shù)據(jù) 實現(xiàn)詞云圖
學到什么?
- 如何申請TDSQL數(shù)據(jù)庫:包括登錄騰訊云、選購配置、購買和管理頁面等相關(guān)步驟。
- 創(chuàng)建項目工程、連接TDSQL數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫等內(nèi)容。
- 涉及讀取詞頻Excel、創(chuàng)建表、保存數(shù)據(jù)到TDSQL、讀取TDSQL數(shù)據(jù)等相關(guān)代碼的講解。
- python 相關(guān)的知識等
準備工作
申請TDSQL數(shù)據(jù)庫
1. 點擊登錄騰訊云
騰訊云地址
2. 點擊立即選購 ,如下圖所示
3. 選購頁面中的數(shù)據(jù)庫配置選項如下
**注意 **:這里的實例形態(tài)我們選擇
Serverless
- 實例形態(tài) **(Serverless)**
- 數(shù)據(jù)庫引擎 **(MYSQL)**
- 地域 **(北京)** *地域這里根據(jù)自己的實際情況選擇即可*
- 主可用區(qū) **(北京三區(qū))** *主可用區(qū)這里根據(jù)自己的實際情況選擇即可*
- 多可用區(qū)部署 **(否)**
- 傳輸鏈路
- 網(wǎng)絡
- 數(shù)據(jù)庫版本 **(MySQL5.7)**
- 算力配置 **最小(0.25) , 最大(0.5)**
- 自動暫停 **根據(jù)自己需求配置即可**
- 計算計費模式 **(按量計費)**
- 存儲計費模式 **(按量計費)**
我的配置截圖如下:
4. 基礎(chǔ)信息
配置這里我們直接
設(shè)置自己的密碼
以及表名大小寫不敏感
即可 , 如下圖所示
5. 配置完成后點擊 右下角的立即購買即可
6. 點擊立即購買后會有彈窗如下, 再次點擊
7. 購買完成后 , 會出現(xiàn)彈窗 , 點擊前往管理頁面
8. 讀寫實例這里 點擊開啟外部
9. 創(chuàng)建并授權(quán)即可
至此我們的準備工作就完成了, 其實還是蠻簡單的哦!
數(shù)據(jù)準備
所需數(shù)據(jù) 如下
- 詞頻
- 背景圖
- 字體文件
下載地址放在文末有需要的可以去下載哦!
創(chuàng)建項目工程
工程目錄如下
講解說明:
- 文件中的詞云圖文件夾 做為生成圖片的存儲路徑
-
background.png
作為詞云圖背景圖 - 字體文件則是詞云圖的字體展示
- 詞頻是數(shù)據(jù)支撐
-
wordPhoto.py
為腳本文件
鏈接 TDSQL
打開數(shù)據(jù)庫讀寫實例 找到相關(guān)配置 如圖
# MySQL數(shù)據(jù)庫連接配置
db_config = {
'host': "XXXXXX", # 這里填寫你自己申請的外部主機名
'port': xxxx, # 這里填寫你自己申請的外部的端口
'user': "root", # 賬戶
'password': "", # 密碼就是你自己創(chuàng)建實例時的密碼
'database': 'tdsql', # 這里需要自己在自己創(chuàng)建的`tdsql`中創(chuàng)建數(shù)據(jù)庫 ,
}
創(chuàng)建數(shù)據(jù)庫
- 如圖點擊登錄按鈕 , 登錄到我們創(chuàng)建的數(shù)據(jù)庫中
- 進入數(shù)據(jù)庫點擊
新建庫
- 點擊
新建數(shù)據(jù)庫
, 出現(xiàn)彈窗 - 在彈窗中的
數(shù)據(jù)庫名稱
中寫入你喜歡的數(shù)據(jù)庫名稱即可 ,這里我們用的是tdsql
, 作為數(shù)據(jù)庫名稱 , 填寫好數(shù)據(jù)庫名稱后,點擊確定創(chuàng)建
即可 - 列表中出現(xiàn)我們創(chuàng)建的數(shù)據(jù)庫名稱后 , 就表示創(chuàng)建好了 , 我們就可以開始代碼編寫了哦!
函數(shù)模塊
讀取詞頻excel
def excelTomysql():
path = '詞頻' # 文件所在文件夾
files = [path + "/" + i for i in os.listdir(path)] # 獲取文件夾下的文件名,并拼接完整路徑
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作為表名,去除文件擴展名
# 使用pandas庫讀取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假設(shè)第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 動態(tài)生成列名和數(shù)據(jù)類型
create_table(table_name, columns) # 創(chuàng)建表
save_to_mysql(data, table_name) # 將數(shù)據(jù)保存到MySQL數(shù)據(jù)庫中,并使用文件名作為表名
print(filename + ' uploaded and saved to MySQL successfully')
代碼講解
- 設(shè)置文件夾路徑為’詞頻’,將該路徑賦值給變量
path
。 - 使用
os.listdir()
函數(shù)獲取文件夾下的所有文件名,并拼接完整路徑,存儲到列表files
中。 - 使用
for
循環(huán)遍歷files
列表中的每個文件路徑,并打印出文件路徑。 - 使用
os.path.basename()
函數(shù)獲取文件名,并將文件名賦值給變量filename
。 - 使用
os.path.splitext()
函數(shù)獲取文件名的擴展名,并通過索引操作去除擴展名部分,得到表名,并將表名賦值給變量table_name
。 - 使用
pandas
庫的read_excel()
函數(shù)讀取 Excel 文件,并將數(shù)據(jù)存儲到變量data
中。在讀取過程中,使用openpyxl
引擎,并假設(shè)第一行是列名。 - 使用字典推導式生成一個字典
columns
,其中字典的鍵為數(shù)據(jù)的列名,值為 “VARCHAR(255)” 數(shù)據(jù)類型。 - 調(diào)用
create_table()
函數(shù),以table_name
和columns
作為參數(shù),創(chuàng)建一個對應的表。 - 調(diào)用
save_to_mysql()
函數(shù),以data
和table_name
作為參數(shù),將數(shù)據(jù)保存到 MySQL 數(shù)據(jù)庫中,并使用文件名作為表名。 - 打印出文件名加上 ’ uploaded and saved to MySQL successfully’ 的提示信息。
創(chuàng)建表
def create_table(table_name, columns):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 組裝創(chuàng)建表的 SQL 查詢語句
query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
for col_name, col_type in columns.items():
query += f"{col_name} {col_type}, "
query = query.rstrip(", ") # 去除最后一個逗號和空格
query += ")"
# 執(zhí)行創(chuàng)建表的操作
cursor.execute(query)
# 提交事務并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
代碼講解
- 建立與MySQL數(shù)據(jù)庫的連接,連接參數(shù)通過變量
db_config
提供。 - 創(chuàng)建一個光標對象
cursor
,用于執(zhí)行SQL語句。 - 組裝創(chuàng)建表的SQL查詢語句。首先,在SQL查詢語句中插入表名
table_name
。然后,通過for
循環(huán)遍歷columns
字典中的每個鍵值對,分別將列名和數(shù)據(jù)類型添加到SQL查詢語句中。 - 去除SQL查詢語句末尾的最后一個逗號和空格。
- 添加右括號,完成SQL查詢語句的組裝。
- 使用光標對象
cursor
執(zhí)行創(chuàng)建表的操作,執(zhí)行的SQL語句為組裝好的查詢語句。 - 提交事務,將對數(shù)據(jù)庫的修改持久化。
- 關(guān)閉光標和數(shù)據(jù)庫連接。
代碼中使用了 pymysql
模塊來建立MySQL數(shù)據(jù)庫連接,并通過編寫SQL語句來執(zhí)行創(chuàng)建表的操作。具體的數(shù)據(jù)庫連接參數(shù)在 db_config
變量中提供,而 columns
參數(shù)則是由之前的代碼生成的一個字典,包含了表的列名和數(shù)據(jù)類型。
保存數(shù)據(jù)到tdsql
def save_to_mysql(data, table_name):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 將數(shù)據(jù)寫入MySQL表中(假設(shè)數(shù)據(jù)只有一個Sheet)
for index, row in data.iterrows():
query = f"INSERT INTO {table_name} ("
for col_name in data.columns:
query += f"{col_name}, "
query = query.rstrip(", ") # 去除最后一個逗號和空格
query += ") VALUES ("
values = tuple(row)
query += ("%s, " * len(values)).rstrip(", ") # 動態(tài)生成值的占位符
query += ")"
cursor.execute(query, values)
# 提交事務并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
代碼講解
- 建立與MySQL數(shù)據(jù)庫的連接,連接參數(shù)通過變量
db_config
提供。 - 創(chuàng)建一個光標對象
cursor
,用于執(zhí)行SQL語句。 - 對于數(shù)據(jù)中的每一行,使用
for
循環(huán)迭代,獲取索引和行數(shù)據(jù)。 - 組裝插入數(shù)據(jù)的SQL查詢語句。首先,在SQL查詢語句中插入表名
table_name
。然后,通過for
循環(huán)遍歷數(shù)據(jù)的列名,將列名添加到SQL查詢語句中。 - 去除SQL查詢語句末尾的最后一個逗號和空格。
- 添加右括號,完成SQL查詢語句的組裝。
- 使用
tuple(row)
將行數(shù)據(jù)轉(zhuǎn)換為元組類型,并將值占位符%s
動態(tài)生成相應數(shù)量的占位符。 - 將值的占位符添加到SQL查詢語句中。
- 使用光標對象
cursor.execute()
執(zhí)行SQL查詢語句,將查詢語句中的占位符替換為實際的行數(shù)據(jù)。 - 提交事務,將對數(shù)據(jù)庫的修改持久化。
- 關(guān)閉光標和數(shù)據(jù)庫連接。
讀取tdsql
數(shù)據(jù)
def query_data():
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查詢所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
data = []
dic_list = []
table_name_list = []
for table in tables:
# for table in [tables[-1]]:
table_name = table[0]
table_name_list.append(table_name)
query = f"SELECT * FROM {table_name}"
# # 執(zhí)行查詢并獲取結(jié)果
cursor.execute(query)
result = cursor.fetchall()
if len(result) > 0:
columns = [desc[0] for desc in cursor.description]
table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
data.extend(table_data)
dic = {}
for i in data:
dic[i['word']] = float(i['count'])
dic_list.append(dic)
conn.commit()
cursor.close()
conn.close()
return dic_list, table_name_list
代碼講解
- 建立與MySQL數(shù)據(jù)庫的連接,連接參數(shù)通過變量
db_config
提供。 - 創(chuàng)建一個光標對象
cursor
,用于執(zhí)行SQL語句。 - 使用
cursor.execute()
執(zhí)行SQL查詢語句"SHOW TABLES"
,獲取所有表名。 - 使用
cursor.fetchall()
獲取查詢結(jié)果,將結(jié)果存儲在變量tables
中。 - 創(chuàng)建空列表
data
、dic_list
和table_name_list
,用于存儲查詢結(jié)果的數(shù)據(jù)、字典和表名。 - 對于每個表名
table
,通過for
循環(huán)迭代,獲取表名并添加到table_name_list
中。 - 構(gòu)建查詢該表所有數(shù)據(jù)的SQL語句,并使用
cursor.execute()
執(zhí)行該查詢語句。 - 使用
cursor.fetchall()
獲取查詢結(jié)果,將結(jié)果存儲在變量result
中。 - 如果查詢結(jié)果
result
的長度大于0,則說明有數(shù)據(jù),進行以下操作:- 使用
cursor.description
獲取查詢結(jié)果的列名列表,并將列名存儲在變量columns
中。 - 使用列表推導式和字典推導式,將查詢結(jié)果的每一行轉(zhuǎn)換為字典,并將字典存儲在變量
table_data
中。 - 將
table_data
添加到data
列表中。
- 使用
- 根據(jù)
data
中的結(jié)果構(gòu)建字典,并將字典存儲在變量dic
中。 - 將
dic
添加到dic_list
列表中。 - 提交事務,將對數(shù)據(jù)庫的修改持久化。
- 關(guān)閉光標和數(shù)據(jù)庫連接。
- 返回
dic_list
和table_name_list
。
代碼調(diào)用
if __name__ == '__main__':
excelTomysql()
result_list, table_name_list = query_data()
for i in range(len(result_list)):
maskImage = np.array(Image.open('background.PNG')) # 定義詞頻背景圖
# 定義詞云樣式
wc = wordcloud.WordCloud(
font_path='PingFangBold.ttf', # 設(shè)置字體
mask=maskImage, # 設(shè)置背景圖
max_words=800, # 最多顯示詞數(shù)
max_font_size=200) # 字號最大值
# 生成詞云圖
wc.generate_from_frequencies(result_list[i]) # 從字典生成詞云
# 保存圖片到指定文件夾
wc.to_file("詞云圖/{}.png".format(table_name_list[i]))
print("生成的詞云圖【{}】已經(jīng)保存成功!".format(table_name_list[i] + '.png'))
plt.imshow(wc) # 顯示詞云
plt.axis('off') # 關(guān)閉坐標軸
plt.show() # 顯示圖像
代碼講解
- 使用
Image.open()
打開名為 ‘background.PNG’ 的背景圖,并將其轉(zhuǎn)換為NumPy數(shù)組,存儲在變量maskImage
中,作為詞云的背景圖。 - 創(chuàng)建一個
WordCloud
對象wc
,設(shè)置字體路徑、背景圖、最多顯示詞數(shù)和字號最大值等參數(shù)。 - 使用
wc.generate_from_frequencies()
從result_list[i]
的字典數(shù)據(jù)生成詞云圖。 - 使用
wc.to_file()
將生成的詞云圖保存為文件,文件名為 “詞云圖/{}.png”,其中{}
表示對應的表名。 - 打印輸出生成的詞云圖文件名。
- 使用
plt.imshow()
顯示詞云圖。 - 使用
plt.axis('off')
關(guān)閉坐標軸的顯示。 - 使用
plt.show()
顯示圖像。
完整代碼
import pymysql
import pandas as pd
import os
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# MySQL數(shù)據(jù)庫連接配置
db_config = {
'host': "XXXXXX", # 這里填寫你自己申請的外部主機名
'port': xxxx, # 這里填寫你自己申請的外部的端口
'user': "root", # 賬戶
'password': "", # 密碼就是你自己創(chuàng)建實例時的密碼
'database': 'tdsql', # 這里需要自己在自己創(chuàng)建的`tdsql`中創(chuàng)建數(shù)據(jù)庫 ,
}
def create_table(table_name, columns):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 組裝創(chuàng)建表的 SQL 查詢語句
query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
for col_name, col_type in columns.items():
query += f"{col_name} {col_type}, "
query = query.rstrip(", ") # 去除最后一個逗號和空格
query += ")"
# 執(zhí)行創(chuàng)建表的操作
cursor.execute(query)
# 提交事務并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
def excelTomysql():
path = '詞頻' # 文件所在文件夾
files = [path + "/" + i for i in os.listdir(path)] # 獲取文件夾下的文件名,并拼接完整路徑
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作為表名,去除文件擴展名
# 使用pandas庫讀取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假設(shè)第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 動態(tài)生成列名和數(shù)據(jù)類型
create_table(table_name, columns) # 創(chuàng)建表
save_to_mysql(data, table_name) # 將數(shù)據(jù)保存到MySQL數(shù)據(jù)庫中,并使用文件名作為表名
print(filename + ' uploaded and saved to MySQL successfully')
def save_to_mysql(data, table_name):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 將數(shù)據(jù)寫入MySQL表中(假設(shè)數(shù)據(jù)只有一個Sheet)
for index, row in data.iterrows():
query = f"INSERT INTO {table_name} ("
for col_name in data.columns:
query += f"{col_name}, "
query = query.rstrip(", ") # 去除最后一個逗號和空格
query += ") VALUES ("
values = tuple(row)
query += ("%s, " * len(values)).rstrip(", ") # 動態(tài)生成值的占位符
query += ")"
cursor.execute(query, values)
# 提交事務并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
def query_data():
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查詢所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
data = []
dic_list = []
table_name_list = []
for table in tables:
# for table in [tables[-1]]:
table_name = table[0]
table_name_list.append(table_name)
query = f"SELECT * FROM {table_name}"
# # 執(zhí)行查詢并獲取結(jié)果
cursor.execute(query)
result = cursor.fetchall()
if len(result) > 0:
columns = [desc[0] for desc in cursor.description]
table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
data.extend(table_data)
dic = {}
for i in data:
dic[i['word']] = float(i['count'])
dic_list.append(dic)
conn.commit()
cursor.close()
conn.close()
return dic_list, table_name_list
if __name__ == '__main__':
excelTomysql()
result_list, table_name_list = query_data()
for i in range(len(result_list)):
maskImage = np.array(Image.open('background.PNG')) # 定義詞頻背景圖
# 定義詞云樣式
wc = wordcloud.WordCloud(
font_path='PingFangBold.ttf', # 設(shè)置字體
mask=maskImage, # 設(shè)置背景圖
max_words=800, # 最多顯示詞數(shù)
max_font_size=200) # 字號最大值
# 生成詞云圖
wc.generate_from_frequencies(result_list[i]) # 從字典生成詞云
# 保存圖片到指定文件夾
wc.to_file("詞云圖/{}.png".format(table_name_list[i]))
print("生成的詞云圖【{}】已經(jīng)保存成功!".format(table_name_list[i] + '.png'))
plt.imshow(wc) # 顯示詞云
plt.axis('off') # 關(guān)閉坐標軸
plt.show() # 顯示圖像
注意
運行代碼前 引入相關(guān)的包哦!
pip install pymysql
pip install pandas
pip install wordcloud
pip install numpy
pip install pillow
pip install matplotlib
運行代碼
寫入截圖
數(shù)據(jù)庫數(shù)據(jù)截圖
生成詞云圖
將詞云圖存入到文件夾
刪除TDSQL
體驗完成, 考慮到當前這個業(yè)務沒必要繼續(xù)開啟數(shù)據(jù)庫了, 防止無效計費, 所以刪除一下
如圖點擊銷毀按鈕
出現(xiàn)銷毀實例的彈窗, 點擊確定即可
資源下載
資源在百度盤里 自取哦 !
鏈接: https://pan.baidu.com/s/1hClOJI07HUuGBQ2SwZfWjw 提取碼: 5mm9
–來自百度網(wǎng)盤超級會員v7的分享
總結(jié)
使用
TDSQL
時你會發(fā)現(xiàn), 真的是無縫接入, 非常的絲滑, 當然也有些不足,希望可以改進哦!!
優(yōu)點
- 騰訊云數(shù)據(jù)庫 TDSQL整體使用和感受還是很好的,操作比較簡單,通過簡單的官方文檔就是搭建成功,其次性價比很高,尤其對于初學者新手 ,
- 與傳統(tǒng)的數(shù)據(jù)庫相比,TD-SQL Serverless的計費方式更為靈活,按照實際使用的資源進行付費,避免了長期運行服務器的成本。同時,它也可以在空閑時自動休眠,減少不必要的費用。
缺點文章來源:http://www.zghlxwxcb.cn/news/detail-648246.html
- 由于TD-SQL Serverless會在請求到達時才進行資源的分配和啟動,因此在首次請求時可能會有一定的延遲。對于一些對實時性要求較高的應用場景,延遲可能會影響用戶體驗。
- 相比于傳統(tǒng)的數(shù)據(jù)庫,TD-SQL Serverless提供的配置和優(yōu)化選項較少,用戶對底層資源的控制能力有限。這可能會導致一些特定的需求無法滿足。
- 雖然TD-SQL Serverless可以根據(jù)需求自動擴展計算資源,但高并發(fā)流量可能會導致較高的成本。如果在短時間內(nèi)存在大量的并發(fā)請求,可能需要支付額外費用。
注意 這個三個缺點我只是根據(jù)經(jīng)驗進行猜想, 如有錯誤還請及時指正哦!!文章來源地址http://www.zghlxwxcb.cn/news/detail-648246.html
到了這里,關(guān)于【騰訊云 TDSQL-C Serverless 產(chǎn)品體驗】 使用 Python 向 TDSQL-C 添加讀取數(shù)據(jù) 實現(xiàn)詞云圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!