相关推荐recommended
【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡
作者:mmseoamin日期:2023-12-05

文章目录

  • 前言
  • 工作准备
    • 1. 购买并开通TDSQL-C MySQL Serverless
      • 数据库配置
      • 计费模式
      • 购买
      • 开启读写地址
      • 测试连接
      • 2. 向数据库中写入名片卡所需要的数据
        • 配置数据库链接
          • 代码解析
          • 创建读取EXCEL 函数
            • 代码解析
            • 创建表并写入excel 数据
              • 代码解析
              • 3. 准备名片卡模板
              • 4. 读取数据库中的数据,生成名片卡
                • 代码解析
                • 执行代码
                  • 目录结构
                  • 打印结果
                  • 查看数据是否写入
                  • 生成名片卡菜单
                  • 查看名片卡效果
                  • 完整代码
                  • 总结

                    前言

                    在当今科技快速发展的时代,数据处理和应用已经成为各行各业不可或缺的一部分。而在许多工作场景中,我们经常需要将Excel表格中的数据导入数据库,并以某种方式进行进一步处理和呈现。而随着云计算的普及,TDSQL Serveless作为一种新兴的数据库服务形式,为我们提供了更加灵活、高效的数据管理解决方案。

                    本文将重点探讨如何利用TDSQL Serveless进行数据库表格的批量导入与读取,并结合具体实例,展示如何快速生成名片卡。名片卡作为一种常见的商务工具,承载了信息交流和社交背景的重要功能。通过将Excel中的个人信息与数据库相结合,我们可以在不费力的情况下生成个性化的名片卡,从而提高工作效率和用户体验。

                    工作准备

                    1. 购买并开通TDSQL-C MySQL Serverless

                    点击链接进行产品选购

                    数据库配置

                    • 实例形态 选择 Serveless
                    • 数据库引擎 选择 MySQL
                    • 地域 根据自己的情况进行选择 本次案例选择的是 广州
                    • 主可用区 选择 广州四区
                    • 多可用区部署 选择 否
                    • 传输链路默认 高IO版
                    • 网络 选择 默认
                    • 数据库版本 选择 MySQL5.7
                    • 算力配置 根据自己的情况进行选择, 温馨提示:读写实例越大每小时消费的费用越高哦!!
                    • 自动暂停 根据自己的情况选择, 如果有其他业务可以取消勾选

                      注意:

                      算力配置中有一个只读组, 但是只读节点数量目前不支持自动弹性

                      【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第1张

                      计费模式

                      • 计算计费模式 选择 按量计费
                      • 存储计费模式 这里我们可以购买一个资源包用于存储哦!!

                        基础信息 以及 高级配置可以根据自己的需求进行简单配置

                        最终配置效果图

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第2张

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第3张

                        购买

                        安装我当前的配置点击立即购买, 会出现如下弹窗,我们可以看到预计的每小时扣费多少。

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第4张

                        开启读写地址

                        当实例创建成功后我们点击开启外部的读写地址, 方便我们进行SQL 的数据读取

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第5张

                        测试连接

                        接下来我使用的是Navicat Premium 进行的远程访问

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第6张

                        在Navicat Premium 中新建数据库链接, 输入以下信息:

                        1. 连接名,
                        2. 主机
                        3. 端口
                        4. 用户名
                        5. 密码

                          点击左下角的测试链接, 提示连接成功 后点击右下角的保存即可

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第7张

                        到此我们的数据库的准备工作已经完成!!! 撒花

                        2. 向数据库中写入名片卡所需要的数据

                        如图所示将我们准备好的excel 数据写入到数据库中

                        【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第8张

                        配置数据库链接

                        db_config = {
                            'host': "xxxxx",  # 主机名
                            'port': xxxx,  # 端口
                            'user': "root",  # 账户
                            'password': "xxx",  # 密码
                            'database': 'myworkcard', # 数据库名称
                        }
                        
                        代码解析
                        • host:主机名,指的是需要连接到的数据库服务器地址。
                        • port:端口号,指的是数据库服务器端口。
                        • user:账户,指的是登录数据库所使用的用户名。
                        • password:密码,指的是对应用户的登录密码。
                        • database:数据库名称,指的是需要连接的具体数据库。

                          创建读取EXCEL 函数

                          def read_excel(excel_file):
                              # 打开excel
                              excel = openpyxl.load_workbook(excel_file)
                              # 选择工作薄-选择第一个
                              sheet = excel.worksheets[0]
                              # 创建一个空列表
                              data_list = []
                              for row in sheet.iter_rows(min_row=1, values_only=True):
                                  data_list.append((row[1],row[2]))
                                  print(row[1], '----', row[2])
                              print(data_list)
                              #调用函数写入数据库
                              return write_db(data_list)
                          
                          代码解析
                          1. 打开Excel文件:

                            excel = openpyxl.load_workbook(excel_file)
                            

                            使用openpyxl库的load_workbook()函数打开指定的Excel文件,将其赋值给变量excel。

                          2. 选择工作薄:

                            sheet = excel.worksheets[0]
                            

                            通过worksheets属性选择第一个工作薄,将其赋值给变量sheet。

                          3. 创建空列表:

                            data_list = []
                            

                            创建一个空列表data_list,用于存储从Excel中读取出的数据。

                          4. 遍历Excel表格并读取数据:

                            for row in sheet.iter_rows(min_row=1, values_only=True):
                                data_list.append((row[1], row[2]))
                                print(row[1], '----', row[2])
                            

                            使用iter_rows()函数遍历工作薄中的每一行数据。min_row=1表示从第一行开始遍历。values_only=True表示只获取单元格的值,而不是包含格式等其他信息。然后将读取到的第2列和第3列数据添加到data_list列表中,并通过print()函数打印出来。

                          5. 输出数据列表:

                            print(data_list)
                            

                            打印输出完整的数据列表data_list,显示从Excel文件中读取出来的所有数据。

                          6. 调用写入数据库的函数:

                            return write_db(data_list)
                            

                            将读取到的数据列表data_list作为参数传递给名为write_db的函数,并返回函数调用的结果。

                          创建表并写入excel 数据

                           
                          def write_db(data_list):
                              # 创建一个数据库连接
                              conn = pymysql.connect(**db_config)
                              # 创建一个游标
                              cursor = conn.cursor()
                              # 执行创建表的操作, 如果表已经存在, 则不执行
                              cursor.execute("create table if not exists cardlist(name varchar(20), work varchar(20))")
                              #cursor.execute("create table cardlist(name varchar(20), work varchar(20))")
                              # 提交事务
                              conn.commit()
                              # 关闭游标和数据库连接
                              cursor.close()
                              conn.close()
                              # 调用函数写入数据库
                              return write_db_data(data_list)
                          def write_db_data(data_list):
                              # 创建一个数据库连接
                              conn = pymysql.connect(**db_config)
                              # 创建一个游标
                              cursor = conn.cursor()
                              # 执行写入操作
                              for data in data_list:
                                  cursor.execute("insert into cardlist(name, work) values(%s, %s)", data)
                              # 提交事务
                              conn.commit()
                              # 关闭游标和数据库连接
                              cursor.close()
                              conn.close()
                              return data_list
                          
                          代码解析
                          1. 函数write_db,用于将数据写入数据库:

                            • 创建一个数据库连接:使用pymysql.connect()函数和**db_config参数创建数据库连接对象,并将其赋值给变量conn。
                            • 创建一个游标:使用conn.cursor()方法创建游标对象,并将其赋值给变量cursor。
                            • 执行创建表的操作:使用cursor.execute()方法执行SQL语句,如果表已经存在,则不执行创建操作。通过SQL语句"create table if not exists cardlist(name varchar(20), work varchar(20))"来创建名为cardlist的表,该表包含名为name和work的两列,数据类型分别为varchar(20)。
                            • 提交事务:使用conn.commit()方法提交数据库事务,将之前的操作生效。
                            • 关闭游标和数据库连接:使用cursor.close()方法关闭游标,使用conn.close()方法关闭数据库连接。
                            • 调用函数write_db_data并返回结果:使用return write_db_data(data_list)调用函数write_db_data将data_list作为参数传递,并返回函数调用的结果。
                            • 函数write_db_data,用于执行数据的写入操作:

                              • 创建一个数据库连接:同样使用pymysql.connect()函数和**db_config参数创建数据库连接对象,并将其赋值给变量conn。
                              • 创建一个游标:使用conn.cursor()方法创建游标对象,并将其赋值给变量cursor。
                              • 执行写入操作:通过for循环遍历data_list,并使用cursor.execute()方法执行SQL语句插入数据到cardlist表中。SQL语句为"insert into cardlist(name, work) values(%s, %s)",其中%s是占位符,用于接收data中对应位置的值。
                              • 提交事务:使用conn.commit()方法提交数据库事务,将之前的写入操作生效。
                              • 关闭游标和数据库连接:使用cursor.close()方法关闭游标,使用conn.close()方法关闭数据库连接。
                              • 返回数据列表:返回data_list数据列表作为函数调用的结果。

                          3. 准备名片卡模板

                          创建一个word 文件命名为template.docx 配置自己喜欢的模板, 参考如下:

                          【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第9张

                          4. 读取数据库中的数据,生成名片卡

                          #定义一个函数,用于读取数据库中的数据
                          def read_db():
                              # 创建一个数据库连接
                              conn = pymysql.connect(**db_config)
                              # 创建一个游标
                              cursor = conn.cursor()
                              # 执行查询操作
                              cursor.execute("select * from cardlist")
                              # 获取查询结果
                              result = cursor.fetchall()
                              #循环遍历查询结果
                              for row in result:
                                  print(row)
                                  # 打开模板
                                  doc = DocxTemplate('template.docx')
                                  # 设置内容对应关系
                                  context = {'name': row[0], 'work': row[1]}
                                  # 填充内容
                                  doc.render(context)
                                  na = row[0]
                                  # 保存新的文件
                                  doc.save(f'{na}.docx')
                                  # 友好提示
                                  print(f'{na}的word-生成完毕!!')
                              # 关闭游标和数据库连接
                              cursor.close()
                              conn.close()
                              return result
                               
                          

                          代码解析

                          • 创建一个数据库连接:使用pymysql.connect()函数和**db_config参数创建数据库连接对象,并将其赋值给变量conn。
                          • 创建一个游标:使用conn.cursor()方法创建游标对象,并将其赋值给变量cursor。
                          • 执行查询操作:使用cursor.execute()方法执行SQL语句"select * from cardlist",并将查询结果赋值给变量result。
                          • 循环遍历查询结果:通过for循环遍历每一行数据,对于每一行数据,执行如下操作:
                            • 打开一个Word模板:使用DocxTemplate()函数读取名为template.docx的模板文件,并将其赋值给变量doc。
                            • 设置内容对应关系:创建一个字典context,其中键名分别为name和work,对应的键值为该行的第一列和第二列数据,即row[0]和row[1]。
                            • 填充内容:使用doc.render()方法将模板中的占位符替换为相应的值,实现内容的动态填充。
                            • 保存生成的Word文档:使用doc.save()方法将生成的Word文档保存到当前目录下,文件名为该行数据的第一列(即姓名)。
                            • 友好提示:输出一个字符串,表示该行数据的Word文档生成已完成。
                            • 关闭游标和数据库连接:使用cursor.close()方法关闭游标,使用conn.close()方法关闭数据库连接。
                            • 返回查询结果:返回变量result作为函数调用的结果。

                              执行代码

                              if __name__ == '__main__':
                                  data_list = read_excel('名单.xlsx')
                                  print(data_list)
                                  read_db()
                              

                              目录结构

                              【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第10张

                              打印结果

                              【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第11张

                              查看数据是否写入

                              【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第12张

                              生成名片卡菜单

                              【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第13张

                              查看名片卡效果

                              【腾讯云 TDSQL-C Serverless 产品体验】大数据时代下,利用TDSQL Serveless轻松管理Excel数据并生成名片卡,在这里插入图片描述,第14张

                              完整代码

                              import openpyxl
                              from docxtpl import DocxTemplate
                              import pymysql
                              # MySQL数据库连接配置
                              db_config = {
                                  'host': "xxxx",  # 主机名
                                  'port': xxx,  # 端口
                                  'user': "root",  # 账户
                                  'password': "xxxxx",  # 密码
                                  'database': 'myworkcard',
                              }
                              # 创建一个读取excel 文件的函数
                              def read_excel(excel_file):
                                  # 打开excel
                                  excel = openpyxl.load_workbook(excel_file)
                                  # 选择工作薄-选择第一个
                                  sheet = excel.worksheets[0]
                                  # 创建一个空列表
                                  data_list = []
                                  for row in sheet.iter_rows(min_row=1, values_only=True):
                                      data_list.append((row[1],row[2]))
                                      print(row[1], '----', row[2])
                                  print(data_list)
                                  #调用函数写入数据库
                                  return write_db(data_list)
                              
                              # 创建一个函数, 将数据写入数据库
                              def write_db(data_list):
                                  # 创建一个数据库连接
                                  conn = pymysql.connect(**db_config)
                                  # 创建一个游标
                                  cursor = conn.cursor()
                                  # 执行创建表的操作, 如果表已经存在, 则不执行
                                  cursor.execute("create table if not exists cardlist(name varchar(20), work varchar(20))")
                                  #cursor.execute("create table cardlist(name varchar(20), work varchar(20))")
                                  # 提交事务
                                  conn.commit()
                                  # 关闭游标和数据库连接
                                  cursor.close()
                                  conn.close()
                                  # 调用函数写入数据库
                                  return write_db_data(data_list)
                              def write_db_data(data_list):
                                  # 创建一个数据库连接
                                  conn = pymysql.connect(**db_config)
                                  # 创建一个游标
                                  cursor = conn.cursor()
                                  # 执行写入操作
                                  for data in data_list:
                                      cursor.execute("insert into cardlist(name, work) values(%s, %s)", data)
                                  # 提交事务
                                  conn.commit()
                                  # 关闭游标和数据库连接
                                  cursor.close()
                                  conn.close()
                                  return data_list
                              #定义一个函数,用于读取数据库中的数据
                              def read_db():
                                  # 创建一个数据库连接
                                  conn = pymysql.connect(**db_config)
                                  # 创建一个游标
                                  cursor = conn.cursor()
                                  # 执行查询操作
                                  cursor.execute("select * from cardlist")
                                  # 获取查询结果
                                  result = cursor.fetchall()
                                  #循环遍历查询结果
                                  for row in result:
                                      print(row)
                                      # 打开模板
                                      doc = DocxTemplate('template.docx')
                                      # 设置内容对应关系
                                      context = {'name': row[0], 'work': row[1]}
                                      # 填充内容
                                      doc.render(context)
                                      na = row[0]
                                      # 保存新的文件
                                      doc.save(f'{na}.docx')
                                      # 友好提示
                                      print(f'{na}的word-生成完毕!!')
                                  # 关闭游标和数据库连接
                                  cursor.close()
                                  conn.close()
                                  return result
                              if __name__ == '__main__':
                                  data_list = read_excel('名单.xlsx')
                                  print(data_list)
                                  read_db()
                              

                              总结

                              本文介绍了使用TDSQL Serveless数据库添加Excel数据,并生成名片卡的流程。具体步骤包括:读取Excel文件中的数据,将数据插入到TDSQL Serveless数据库的表中,从数据库中读取数据并生成名片卡。在实现过程中需要使用pandas、pymysql等库。需要注意的是,在使用pymysql库建立连接时,需要将代码中的连接信息替换为实际的连接信息。此外,使用docxtpl库动态填充名片卡内容时,需要事先定义名片卡模板,并在代码中指定模板文件的路径。