TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备高弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C MySQL 版100%兼容 MySQL 5.7、8.0。实现超百万级 QPS 的高吞吐,最高 PB 级智能存储,保障数据安全可靠。TDSQL-C MySQL 版采用存储和计算分离的架构,所有计算节点共享一份数据,提供秒级的配置升降级、秒级的故障恢复,单节点可支持百万级 QPS,自动维护数据和备份,最高以GB/秒的速度并行回档。TDSQL-C MySQL 版既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、高效迭代的优势。TDSQL-C MySQL 版引擎完全兼容原生 MySQL,您可以在不修改应用程序任何代码和配置的情况下,将 MySQL 数据库迁移至 TDSQL-C MySQL 版引擎。
本篇文章我们将一步一步的实现 使用 Python 向 TDSQL-C 添加读取数据 实现词云图
注意 :这里的实例形态我们选择Serverless
- 实例形态 **(Serverless)** - 数据库引擎 **(MYSQL)** - 地域 **(北京)** *地域这里根据自己的实际情况选择即可* - 主可用区 **(北京三区)** *主可用区这里根据自己的实际情况选择即可* - 多可用区部署 **(否)** - 传输链路 - 网络 - 数据库版本 **(MySQL5.7)** - 算力配置 **最小(0.25) , 最大(0.5)** - 自动暂停 **根据自己需求配置即可** - 计算计费模式 **(按量计费)** - 存储计费模式 **(按量计费)**
我的配置截图如下:
配置这里我们直接设置自己的密码 ?以及 表名大小写不敏感即可 , 如下图所示
至此我们的准备工作就完成了, 其实还是蛮简单的哦!
所需数据 如下
下载地址放在文末有需要的可以去下载哦!
工程目录如下
讲解说明:
打开数据库读写实例 找到相关配置 如图
# MySQL数据库连接配置 db_config = { 'host': "XXXXXX", # 这里填写你自己申请的外部主机名 'port': xxxx, # 这里填写你自己申请的外部的端口 'user': "root", # 账户 'password': "", # 密码就是你自己创建实例时的密码 'database': 'tdsql', # 这里需要自己在自己创建的`tdsql`中创建数据库 , }
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) # 假设第一行是列名 columns = {col: "VARCHAR(255)" for col in data.columns} # 动态生成列名和数据类型 create_table(table_name, columns) # 创建表 save_to_mysql(data, table_name) # 将数据保存到MySQL数据库中,并使用文件名作为表名 print(filename + ' uploaded and saved to MySQL successfully')
def create_table(table_name, columns): # 建立MySQL数据库连接 conn = pymysql.connect(**db_config) cursor = conn.cursor() # 组装创建表的 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 += ")" # 执行创建表的操作 cursor.execute(query) # 提交事务并关闭连接 conn.commit() cursor.close() conn.close()
代码中使用了 pymysql 模块来建立MySQL数据库连接,并通过编写SQL语句来执行创建表的操作。具体的数据库连接参数在 db_config 变量中提供,而 columns 参数则是由之前的代码生成的一个字典,包含了表的列名和数据类型。
def save_to_mysql(data, table_name): # 建立MySQL数据库连接 conn = pymysql.connect(**db_config) cursor = conn.cursor() # 将数据写入MySQL表中(假设数据只有一个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(", ") # 动态生成值的占位符 query += ")" cursor.execute(query, values) # 提交事务并关闭连接 conn.commit() cursor.close() conn.close()
def query_data(): # 建立MySQL数据库连接 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}" # # 执行查询并获取结果 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', # 设置字体 mask=maskImage, # 设置背景图 max_words=800, # 最多显示词数 max_font_size=200) # 字号最大值 # 生成词云图 wc.generate_from_frequencies(result_list[i]) # 从字典生成词云 # 保存图片到指定文件夹 wc.to_file("词云图/{}.png".format(table_name_list[i])) print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png')) plt.imshow(wc) # 显示词云 plt.axis('off') # 关闭坐标轴 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数据库连接配置 db_config = { 'host': "XXXXXX", # 这里填写你自己申请的外部主机名 'port': xxxx, # 这里填写你自己申请的外部的端口 'user': "root", # 账户 'password': "", # 密码就是你自己创建实例时的密码 'database': 'tdsql', # 这里需要自己在自己创建的`tdsql`中创建数据库 , } def create_table(table_name, columns): # 建立MySQL数据库连接 conn = pymysql.connect(**db_config) cursor = conn.cursor() # 组装创建表的 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 += ")" # 执行创建表的操作 cursor.execute(query) # 提交事务并关闭连接 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) # 假设第一行是列名 columns = {col: "VARCHAR(255)" for col in data.columns} # 动态生成列名和数据类型 create_table(table_name, columns) # 创建表 save_to_mysql(data, table_name) # 将数据保存到MySQL数据库中,并使用文件名作为表名 print(filename + ' uploaded and saved to MySQL successfully') def save_to_mysql(data, table_name): # 建立MySQL数据库连接 conn = pymysql.connect(**db_config) cursor = conn.cursor() # 将数据写入MySQL表中(假设数据只有一个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(", ") # 动态生成值的占位符 query += ")" cursor.execute(query, values) # 提交事务并关闭连接 conn.commit() cursor.close() conn.close() def query_data(): # 建立MySQL数据库连接 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}" # # 执行查询并获取结果 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', # 设置字体 mask=maskImage, # 设置背景图 max_words=800, # 最多显示词数 max_font_size=200) # 字号最大值 # 生成词云图 wc.generate_from_frequencies(result_list[i]) # 从字典生成词云 # 保存图片到指定文件夹 wc.to_file("词云图/{}.png".format(table_name_list[i])) print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png')) plt.imshow(wc) # 显示词云 plt.axis('off') # 关闭坐标轴 plt.show() # 显示图像
运行代码前 引入相关的包哦!
pip install pymysql pip install pandas pip install wordcloud pip install numpy pip install pillow pip install matplotlib
写入截图
数据库数据截图
生成词云图
将词云图存入到文件夹
体验完成, 考虑到当前这个业务没必要继续开启数据库了, 防止无效计费, 所以删除一下
如图点击销毁按钮
出现销毁实例的弹窗, 点击确定即可
资源在百度盘里 自取哦 !
链接: https://pan.baidu.com/s/1hClOJI07HUuGBQ2SwZfWjw 提取码: 5mm9--来自百度网盘超级会员v7的分享
使用TDSQL 时你会发现, 真的是无缝接入, 非常的丝滑, 当然也有些不足,希望可以改进哦!!
优点
缺点
注意 这个三个缺点我只是根据经验进行猜想, 如有错误还请及时指正哦!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。