目录
前言
自己是一位准大二学生,最近在学习数据库的相关知识,偶然间看到这个活动,决心参加并提高自己,文章如果有什么不好之处,忘各位勿喷。可以在评论区留言,给我一些建议,我会虚心接受,并改进文章。
今天我给大家分享一下我对腾讯云TDSQL-C Serverless产品的体验流程以及体验过程的感受。腾讯云的TDSQL-C Serverless产品简直是互联网开发者的福音!
一,TDSQL-C Serverless产品介绍
让我们来谈谈什么是TDSQL-C Serverless。这是一个基于云的关系型数据库,它“Serverless”为特点,意味着我无需担心硬件资源的配置和管理。它可以根据实际需求自动调整容量,并根据数据库的负载情况按需分配资源。对于我们来说,现在可以专注于开发应用,而不用担心数据库的管理。
TDSQL-C是腾讯云自研的新一代云原生关系型数据库,它整合了传统数据库、云计算和新硬件技术的优势。主要特点包括:
兼容性:TDSQL-C完全兼容MySQL,用户可以无缝迁移已有的MySQL应用到TDSQL-C上,无需修改代码。
弹性和高性能:TDSQL-C具备极致的弹性和高性能,能够支持超过百万的QPS(每秒查询率)。
高可用和高可靠:TDSQL-C通过分布式架构和自动数据备份机制,实现了高可用性和高可靠性,确保数据的安全和可靠性。
安全性:TDSQL-C提供了多种安全措施,包括连接加密、访问控制、安全审计等,保障数据的安全性。
不仅如此,TDSQL-C还实现了PB级的海量分布式智能存储和Serverless秒级伸缩功能,为企业加速完成数字化转型提供了强大的支持。
针对Serverless服务,它是TDSQL-C MySQL版的无服务器架构版本,完全基于Serverless架构,提供按实际计算和存储资源使用量计费的方式,通俗来说就是和水电费一样,用多少花多少钱,这意味着我们只需按实际使用的资源付费,避免了闲置资源的浪费,同时也使更多人受益。
二,学到什么
1.如何申请TDSQL-C数据库:注册腾讯云账号及准备工作,进入腾讯云控制台。
2.如何进行配置TDSQL-C数据库:选购与页面管理等相关内容,以及如何参加这个测评,获取测评资格。
3.进行项目配置:链接并配置TDSQL-C数据库。
4.对制作词云图相关代码的讲解:创建读取excel文件,根据excel文件名创建数据库表名,将读取的excel 数据保存到数据库对应的表中,读取数据库中存入的数据,执行主函数,并生成词云图等python代码的讲解。
5.对数据库的应用以及我自己的个人心得
三,准备阶段
1.申请TDSQL-C数据库(第一种方式)
1.1 进行注册登录
第一步点击进入
TDSQL-C MySQL 版_云原生关系型数据库_企业级云原生数据库-腾讯云 (tencent.com)
接下来
点击注册后自行选择自己的方式进行注册并登录
1.2点击红圈进行选购
1.3选购页面的配置
我的配置如下:
按照图片中的信息选择即可
1.4基础信息填写
这里我们需要的操作有三个,一个是输入自己的密码,第二个是选择表名大小写不敏感,最后一个就是勾选同意协议。
配置完后我们点击右下角的立即购买,会弹出一个窗口,我们继续点击红圈
购买完后会出现弹出,我们点击前往管理界面
进入管理页面后,往下划,找到读写实例点击开启外部
创建并授权
ok,配置到这里就全部结束了
2.申请TDSQL-C数据库(第二种方式成为测试者)
2.1如何成为测试者
成为测试者,说是白嫖,可以直接进行测试,也不用进行上述的操作,就可以开始使用了,不如说是一种互利共赢把,相信在产品测评阶段,公司需要我们测试者对其产品的测试并给出宝贵意见,很感谢有这次活动能给我一个学习机会。
下面是参加本次活动的链接:
CSDN
https://marketing.csdn.net/p/0b7f2a95bede3da9f4f9c20813988e69
点击立即报名后,会进行填写表单,这里学生也可以报名,公司那栏填个无。
填写完成后会出现一个二维码,因为平台不让显示二维码,我就不放出来了。
进入群里后,发这句话 @Lear 测试TDSQL-C的数据库配置
她回复后,然后添加Lear,私聊就会发给你配置好的测试数据库信息
这个我就不放出来了,我还要用。具体怎么使用在后面会提到
2.2成为测试者的福利
福利1:
福利2:
可以进行配套进行系统学习和对数据库进行使用,也可以提高自己。
这里把链接给大家
腾讯云开发者社区-腾讯云腾讯云开发者社区是腾讯云官方开发者社区,致力于打造开发者的技术分享型社区。提供专栏,问答,沙龙等产品和服务,汇聚海量精品云计算使用和开发经验,致力于帮助开发者快速成长与发展,营造开放的云计算技术生态圈。
https://cloud.tencent.com/developer/learning/camp/6
其实福利什么的并不重要,重要的是给了小白一个学习的机会。
2.3测评方向
这里不是我不放出来,是我不清楚会不会违规,这个在进入群后,群公告会有。
四,进行数据准备
实现词云图所需数据如下:
1.词频
2.要展示词云形状的背景图
3.词云所使用的字体文件
下载地址:
词频
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/%E8%AF%8D%E9%A2%91.zip
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/%E8%AF%8D%E9%A2%91.zip背景图 https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/background.PNG.zip
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/background.PNG.zip字体 https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/PingFangBold.ttf
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/PingFangBold.ttf
五,使用PyCharm创建项目工程
这里按照图中创建好项目和文件夹,将下载的内容放入对应的文件夹
对文件夹的作用进行解读:
- 词云图文件夹可以用来做为生成图片的存储路径
- 词频是数据词云图数据的来源
- 字体文件则是词云图的中以什么字体展现
background.png
作为词云图背景图sever.py
为代码部分
六,连接TDSQL-C数据库
找到读写实例
对应将信息填入即可,成为测试者的人员,可以直接将发给你的配置信息填写进去就ok了。
当然数据库只填写发给你的其中一个就行。
七,创建数据库
1.如图点击登录
2.点击 新建,然后点击新建库
3.点击新建数据库
4.定义自己的数据库名
5.出现自己定义的数据库名后
ok,到这里,创建数据库就结束了 ,将创建的数据库名填写到连接配置的datebase部分
八,对制作词云图相关代码的讲解
接下来我将解的代码是按顺序进行的,最后只需要将其组合,即可成为完整的代码。
如果只是进行测试的话,只需要改动一小部分代码即可,我会用蓝色字在代码解读中标出来
(1).先导入库
库的版本其中wordcloud库如果无法安装可以是使用最新版本
(2).MySql数据库连接配置
这里大家自行填入,代码如下:
# MySql数据库连接配置
db_config = {
'host': "", # 主机名
'port': , # 端口
'user': "", # 账户
'password': "", # 密码
'database': '', # 这里需要创建自己的数据库创建的数据库名
(3)创建读取excel文件
代码如下:
# 创建读取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) # 假设第一行是列名
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')
重要代码部分解读:
path = '词频/词频'
:设置文件夹路径,假设 Excel 文件都存储在名为”词频”的文件夹中。(注意这段代码只需要将这部分改为你的存放词频的文件夹路径)
files = [path + "/" + i for i in os.listdir(path)]
:使用os.listdir()
获取文件夹中的所有文件名,并通过列表推导式构建完整的文件路径列表。
for file_path in files:
:对每个文件进行迭代。
print(file_path)
:打印当前文件的完整路径。
filename = os.path.basename(file_path)
:使用os.path.basename()
获取文件名(包括扩展名)。
table_name = os.path.splitext(filename)[0]
:使用os.path.splitext()
获取文件的扩展名,并通过索引取得文件名,去除文件扩展名,作为表名。
data = pd.read_excel(file_path, engine="openpyxl", header=0)
:使用 pandas 库的read_excel()
方法读取 Excel 文件,指定引擎为”openpyxl”,header参数指定第一行为列名。
columns = {col: "VARCHAR(255)" for col in data.columns}
:根据数据的列名动态生成一个字典columns
,其中键为列名,值为”VARCHAR(255)”,表示列的数据类型为字符串。
create_table(table_name, columns)
:调用一个名为create_table()
的函数,用于创建一个表,传递表名和列名数据作为参数。
save_to_mysql(data, table_name)
:调用一个名为save_to_mysql()
的函数,用于将数据保存到 MySQL 数据库中,传递数据和表名作为参数。
print(filename + ' uploaded and saved to MySQL successfully')
:打印上传并成功保存到 MySQL 数据库的文件名。
(4)根据excel文件名创建数据库表名
代码入下:
# 根据excel文件名创建数据库表名
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()
重要代码部分解读:
建立MySQL数据库连接,通过pymysql库的
connect()
方法和**db_config
参数来连接数据库。创建一个游标对象
cursor
,用于执行 SQL 语句。组装创建表的 SQL 查询语句。使用
f-string
将表名和列名与数据类型拼接成一个字符串。表名由参数table_name
提供,列名和数据类型由columns
字典提供。循环遍历
columns
字典的键值对,将列名和数据类型拼接到查询语句中。使用
rstrip(", ")
方法去除查询语句中最后一个逗号和空格。将拼接完成的查询语句赋值给变量
query
。执行创建表的操作,使用
cursor.execute(query)
方法执行查询语句。提交事务,使用
conn.commit()
方法确保查询的结果被提交到数据库。关闭游标和数据库连接,使用
cursor.close()
和conn.close()
方法。
(5)将读取的excel数据保存到数据库对应的表中
代码入下:
# 将读取的excel 数据保存到数据库对应的表中
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()
重要代码部分解读:
建立 MySQL 数据库连接,通过 pymysql 库的
connect()
方法和**db_config
参数来连接数据库。创建一个游标对象
cursor
,用于执行 SQL 语句。使用
iterrows()
方法循环遍历数据框架data
中的每一行数据。组装插入数据的 SQL 查询语句。使用
f-string
将表名和列名拼接到查询语句中。循环遍历数据框架的列名,将列名拼接到查询语句中。
使用
rstrip(", ")
方法去除查询语句中最后一个逗号和空格。将拼接完成的查询语句赋值给变量
query
。使用
tuple(row)
将当前行的数据转换为元组values
。使用
("%s, " * len(values)).rstrip(", ")
动态生成值的占位符,并将占位符拼接到查询语句中。使用
cursor.execute(query, values)
方法执行查询语句,并传递元组values
作为参数。提交事务,使用
conn.commit()
方法确保查询的结果被提交到数据库。关闭游标和数据库连接,使用
cursor.close()
和conn.close()
方法。
(6)读取数据库中存入的数据
代码入下:
# 读取数据库中存入的数据
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
重要代码部分解读:
建立 MySQL 数据库连接,通过 pymysql 库的
connect()
方法和**db_config
参数来连接数据库。创建一个游标对象
cursor
,用于执行 SQL 语句。执行查询所有表名的 SQL 语句,使用
cursor.execute("SHOW TABLES")
。使用
cursor.fetchall()
获取所有表名的结果,并将其赋值给tables
变量。定义空列表
data
,用于存储查询结果。定义空列表
dic_list
和table_name_list
,用于存储每个表的数据字典和表名。使用循环遍历
tables
列表的每个元素,获取表名。构建查询表中所有数据的 SQL 语句,使用
f-string
将表名拼接到查询语句中。使用
cursor.execute(query)
执行查询语句。使用
cursor.fetchall()
获取查询结果。判断结果是否为空,如果不为空,则获取查询结果的列名,将结果转换为字典的形式,并将结果添加到
data
列表中。构建一个字典
dic
,将data
列表中的数据以字典形式存储,键为 ‘word’ 列的值,值为 ‘count’ 列的值。将该字典添加到dic_list
列表中。将表名添加到
table_name_list
列表中。提交事务,使用
conn.commit()
方法确保查询的结果被提交到数据库。关闭游标和数据库连接,使用
cursor.close()
和conn.close()
方法。返回
dic_list
和table_name_list
列表作为函数的输出。
(7)执行主函数,并生成词云图
代码如下:
# 执行主函数,并生成词云图
if __name__ == '__main__':
# excelTomysql()方法将excel写入到mysql
excelTomysql()
print("excel写入到mysql成功!")
# query_data()方法将mysql中的数据查询出来,每张表是一个dic,然后绘制词云
result_list, table_name_list = query_data()
print("从mysql获取数据成功!")
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=500, # 最多显示词数
max_font_size=100) # 字号最大值
# 生成词云图
wc.generate_from_frequencies(result_list[i]) # 从字典生成词云
# 保存图片到指定文件夹
wc.to_file("词云图/{}.png".format(table_name_list[i]))
print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
# 在notebook中显示词云图
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
重要代码部分解读:
检查当前代码是否在主函数中运行,使用
if __name__ == '__main__':
。调用函数
excelTomysql()
,将 Excel 数据写入到 MySQL 数据库中。打印成功提示信息:“excel写入到mysql成功!”
调用函数
query_data()
,从 MySQL 数据库中查询数据,并将结果存储在result_list
和table_name_list
变量中。打印成功提示信息:“从mysql获取数据成功!”
使用循环遍历每个表的数据。
使用
np.array(Image.open('background.PNG'))
打开并读取词频背景图,将其转换为maskImage
数组。创建一个
wordcloud.WordCloud()
对象wc
,设置字体、背景图、最大词数和最大字号等参数。使用
wc.generate_from_frequencies(result_list[i])
从字典生成词云图。使用
wc.to_file()
将生成的词云图保存到指定文件夹,文件名为表名加上 “.png” 后缀。打印成功提示信息:“生成的词云图【表名.png】已经保存成功!”
使用
plt.imshow()
显示词云图。使用
plt.axis('off')
关闭坐标轴的显示。使用
plt.show()
显示图像。
(8)完整代码
代码如下:
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': "", # 主机名
'port': , # 端口
'user': "root", # 账户
'password': "", # 密码
'database': '', # 这里需要创建自己的数据库创建的数据库名
}
# 创建读取excel文件的函数
def excelTomysql():
path = 'xxxx' # 文件所在文件夹
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')
# 根据excel文件名创建数据库表名
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()
# 将读取的excel 数据保存到数据库对应的表中
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()方法将excel写入到mysql
excelTomysql()
print("excel写入到mysql成功!")
# query_data()方法将mysql中的数据查询出来,每张表是一个dic,然后绘制词云
result_list, table_name_list = query_data()
print("从mysql获取数据成功!")
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=500, # 最多显示词数
max_font_size=100) # 字号最大值
# 生成词云图
wc.generate_from_frequencies(result_list[i]) # 从字典生成词云
# 保存图片到指定文件夹
wc.to_file("词云图/{}.png".format(table_name_list[i]))
print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
# 在notebook中显示词云图
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
九,词云效果显示
1.运行代码后的效果展示
2.数据库的表展示
十,销毁数据库
如果仅仅像我一样仅供测试使用,在使用完后销毁数据库,避免像我一样欠费了,还被打了电话,虽然不多,不过也提醒了我,要注意使用。
最后记得点击确定。
十一,总结
总的来说这次产品体验还是不错的,因为不仅解决了我当下的学习相关的一些问题,对于我来说就是操作起来没有很多繁琐的东西,虽然我是经过测试直接使用了给的数据库配置,然后我又通过文档自行配置和使用了,发现很容易上手和配置,并且给出的词语图示例代码,对于我一个小白来说都可以读懂并使用,是面向大众使用的一种便于操作和使用的云数据库,当然在开启外网操作时有点慢,我不清楚是什么原因。
当然我也从将Excel数据导入到数据库, 数据库中查询和插入数据,过Web应用程序来展示数据,和展示数据库中的数据这四个方式对这个产品进行测评,下面是我测评后获取到的一些信息,因为篇幅过长我就不进行展示了。
TDSQL-C Serverless的优点:
- TDSQL-C Serverless采用无服务器的架构,可以根据实际需求自动调整计算资源,有效降低了成本和管理复杂性。这点我觉得最好的对于我来说。
- TDSQL-C Serverless会实时自动调整计算资源,无需手动操作,大大简化了数据库管理的工作。这点对于我这个不会管理数据库的小白很适合。
TDSQL-C Serverless的缺点:
- 我偶尔会遇到一些延迟波动的情况,特别是在负载突增时。虽然这种情况发生的不频繁,但仍希望在后续版本中能够得到改进。
- TDSQL-C Serverless在一些功能和性能方面有一些限制,最大连接数、并发查询数等。
我对TDSQL-C Serverless的建议方向如下:
- 提高自动伸缩的精确度和响应速度,减少延迟波动情况的发生。
- 允许用户根据自己的需求进行更细粒度的配置,自定义最大连接数、缓存大小等。
我对TDSQL-C Serverless的体验感非常好,它在节约成本、简化运维等方面具有很大的优势。但希望能对于不足之处进行改进,以满足个人和小型应用的不同需求。
文章出处登录后可见!