【腾讯云 TDSQL-C Serverless 产品体验】 使用 Python 和 TDSQL-C 实现一个线上图书管理系统
作者:mmseoamin日期:2023-12-11

文章目录

  • 前言
  • 操作步骤
    • 准备工作
      • 申请TDSQL-C数据库:
        • 1. 点击登录腾讯云
        • 2.选中产品,搜索“tdsql”,选择TDSQL-C,如下图所示:
        • 3.点击立即选购
        • 4.选购页面中的数据库配置选项如下
        • 5.点击下一步,配置基础信息
        • 6.点击立即购买,弹窗选择立即购买,进行开通
        • 7.此时已经开通成功了,点击前往管理页面
        • 线上图书管理系统项目搭建
          • 项目目标:
          • 创建项目
          • 前端页面搭建
            • index.html页面
            • add_books.html页面
            • lend_books.html页面
            • return_books.html页面
            • show_books.html页面
            • 服务端接口搭建
              • 1. 导入所需的库:
              • 2. 创建Flask应用程序实例:
              • 3. 配置MySQL数据库连接信息:
              • 4. 定义首页路由处理函数:
              • 5. 定义展示书籍页面的路由处理函数:
              • 6. 定义添加书籍页面的路由处理函数:
              • 7. 定义借阅书籍页面的路由处理函数:
              • 8. 定义归还书籍页面的路由处理函数:
              • 9. 启动Flask应用程序:
              • 10.服务端完整代码:
              • 运行项目
                • 添加图书效果
                • 展示图书
                • 借阅图书
                • 归还图书
                • 删除TDSQL
                • 总结与分析
                  • 优点:
                  • 缺点:

                    前言

                    TDSOL是腾讯云自家研发的超级厉害的云原生关系型数据库!它将传统数据库、云计算和最新的硬件技术融合在一起,完美兼容MySQL,并为用户提供了绝对牛逼的弹性、高性能、高可用、高可靠和安全的数据库服务。你绝对想不到,它的吞吐量可以达到超过百万次查询每秒!而且还支持海量数据的分布式智能存储,就像PB级别的大海一样。天啊,还有Serverless秒级伸缩,企业要加速数字化转型简直不要太方便!

                    说到Serverless服务,你绝对没见过腾讯云自家的TDSQL-C无服务器架构版!这个可是全球首款全Serverless架构的云原生数据库哦!说白了,就是使用Serverless服务,你只需按实际使用的计算和存储资源付费,不用的时候完全不用担心花冤枉钱!这种云原生技术真是超级贴心,谁用谁知道!现在,腾讯云的云优势将普惠到更多的用户,就像演唱会门票一样抢手!

                    操作步骤

                    准备工作

                    申请TDSQL-C数据库:

                    1. 点击登录腾讯云

                    腾讯云登录:https://cloud.tencent.com/

                    2.选中产品,搜索“tdsql”,选择TDSQL-C,如下图所示:

                    在这里插入图片描述

                    3.点击立即选购

                    在这里插入图片描述

                    4.选购页面中的数据库配置选项如下

                    **注意 **:这里的实例形态我们选择Serverless

                     - 实例形态   **(Serverless)**
                     -  数据库引擎 **(MYSQL)**
                     - 地域  **(北京)**  *地域这里根据自己的实际情况选择即可* 
                     - 主可用区 **(北京三区)**   *主可用区这里根据自己的实际情况选择即可* 
                     - 多可用区部署 **(否)**
                     - 传输链路 
                     - 网络
                     - 数据库版本 **(MySQL5.7)**
                     - 算力配置 **最小(0.25) , 最大(0.5)**
                     - 自动暂停 **根据自己需求配置即可**
                     - 计算计费模式 **(按量计费)**
                     - 存储计费模式 **(按量计费)**
                    

                    配置截图如下:

                    在这里插入图片描述

                    5.点击下一步,配置基础信息

                    此处需要注意:表名大小写选择不敏感即可,另外设置自己的数据库密码,其他的按照默认值即可。>

                    我的配置截图如下:

                    在这里插入图片描述

                    6.点击立即购买,弹窗选择立即购买,进行开通

                    在这里插入图片描述

                    在这里插入图片描述

                    7.此时已经开通成功了,点击前往管理页面

                    在这里插入图片描述

                    注意!!读写示例这里,需要点击开启外网访问

                    在这里插入图片描述

                    在这里插入图片描述

                    点击确定即可。

                    稍等片刻,就会出现可以外网访问的host和端口了,请记好你的地址和端口,后续会用到。

                    在这里插入图片描述

                    至此,准备工作结束!

                    现在正式开始搭建项目。

                    线上图书管理系统项目搭建

                    项目目标:

                    在这里插入图片描述

                    此项目仅为demo,供娱乐学习使用,本项目主要用python flask来搭建,用pymysql库来连接TDSQL-C产品进行操作数据库,麻雀虽小五脏俱全!

                    接下来就让我们一步步来实现!

                    创建项目

                    项目文件目录如下:

                    在这里插入图片描述

                    其中app.py为服务端文件,

                    templates文件夹中的html文件都是前端页面模板文件,供flask调用的。

                    结构比较简单,项目主要文件就是这几个。

                    前端页面搭建

                    由于是用python flask框架搭建,所以需要在项目下面创建一个templates文件夹,将对应的模板html文件放入到其中,方便进行调用。

                    前端页面的逻辑都比较简单,就不详细展开讲了,我会将讲解的重点放在后端连接数据库以及对数据库的操作上。

                    这几个html页面的代码以及运行后的效果分别截图如下:

                    index.html页面

                    在这里插入图片描述

                    代码:

                    
                    
                    
                        图书管理系统
                    
                    
                        

                    图书管理系统

                    add_books.html页面

                    在这里插入图片描述

                    代码:

                    
                    
                    
                        添加图书
                    
                    
                        

                    添加图书







                    lend_books.html页面

                    在这里插入图片描述

                    代码:

                    
                    
                    
                        借阅图书
                    
                    
                        

                    借阅图书



                    return_books.html页面

                    在这里插入图片描述

                    代码:

                    
                    
                    
                        归还图书
                    
                    
                        

                    归还图书



                    show_books.html页面

                    在这里插入图片描述

                    代码:

                    
                    
                    
                        图书列表
                    
                    
                        

                    图书列表

                    {% for book in books %} {% endfor %}
                    ID 书名 作者 评论 状态
                    {{ book[0] }} {{ book[1] }} {{ book[2] }} {{ book[3] }} {% if book[4] == 1 %}已借出{% else %}未借出{% endif %}

                    服务端接口搭建

                    由于是用python flask框架来写服务端接口,使用pymysql包来进行连接数据库(也就是今天的主角!咱们今天开通的TDSQL-C)

                    本次实现的功能中,前端需要调用的接口有:

                    • 展示书籍 show_books()
                    • 添加书籍 add_book()
                    • 借阅书籍 lend_book()
                    • 归还书籍 return_book()

                      由于是从数据库中进行书籍的读取和写入以及修改,所以还需要连接到数据库。

                      那么如何连接到数据库(TDSQL-C)呢?

                      使用pymysql库即可用python方便的连接到mysql数据库,当然也可以连接到TDSQL-C啦!

                      接下来就一步一步带着你来进行代码实现:

                      咱们这个项目是使用Flask框架来创建一个简单的图书馆管理系统。下面我们一步一步来实现功能:

                      1. 导入所需的库:
                      from flask import Flask, render_template, request
                      import pymysql
                      
                      • 导入Flask库来创建Web应用程序。
                      • 导入render_template方法用于渲染HTML模板。
                      • 导入pymysql库用于连接和操作MySQL数据库。
                        2. 创建Flask应用程序实例:
                        app = Flask(__name__)
                        
                        • 创建一个名为’app’的Flask应用程序实例。
                          3. 配置MySQL数据库连接信息:
                          db_config = {
                              'host': "XXXXXX",  # 此处填写你自己的TDSQL-C的外网host
                              'port': xxxx,   # 此处填写你自己的TDSQL-C的外网端口号
                              'user': "root",  # 你申请时候设置的用户名,默认是root
                              'password': "",  # 密码就是你自己创建实例时的密码
                              'database': 'library', # 这里需要在自己的TDSQL-C中创建一个数据库,名字为:"library" , 
                          }
                          # 检查数据库中是否存在 'books' 表格,如果不存在则创建它
                          connection = pymysql.connect(**db_config)
                          with connection.cursor() as cursor:
                              cursor.execute("SHOW TABLES LIKE 'books'")
                              result = cursor.fetchone()
                              if not result:
                                  cursor.execute(
                                      """
                                      CREATE TABLE books (
                                          id INT AUTO_INCREMENT PRIMARY KEY,
                                          name VARCHAR(255) NOT NULL,
                                          author VARCHAR(255) NOT NULL,
                                          comment TEXT,
                                          state INT DEFAULT 0
                                      )
                                      """
                                  )
                                  connection.commit()
                          connection.close()
                          
                          • 设置MySQL数据库的主机、用户名、密码、数据库名和端口号等连接信息。

                            需要在自己申请的TDSQL-C实例中新建一个数据库,具体操作见下图:

                            在这里插入图片描述

                            在这里插入图片描述

                            在这里插入图片描述

                            这样就创建好了library数据库,后续我们增加的图书,都会在这个库里的books表里。(代码中有创建books表的逻辑,无需手动创建,如果创建了也不影响,做了兼容,但是名字必须叫books。)

                            4. 定义首页路由处理函数:
                            @app.route("/")
                            def index():
                                return render_template("index.html")
                            
                            • 使用@app.route("/")修饰器设置URL路径为根路径’/'的路由。
                            • 定义了一个名为’index’的函数,当用户访问根路径时,返回渲染后的index.html模板。
                              5. 定义展示书籍页面的路由处理函数:
                              @app.route("https://blog.csdn.net/show_books")
                              def show_books():
                                  connection = pymysql.connect(**db_config)
                                  with connection.cursor() as cursor:
                                      cursor.execute("SELECT * FROM books")
                                      books = cursor.fetchall()
                                  connection.close()
                                  return render_template("show_books.html", books=books)
                              
                              • 同样使用@app.route()修饰器,设置URL路径为’https://blog.csdn.net/show_books’的路由。
                              • 在函数中首先连接到MySQL数据库。
                              • 使用cursor对象执行SQL查询语句"SELECT * FROM books",获取所有书籍的数据。
                              • 将连接关闭后,将书籍数据传递给show_books.html模板进行渲染。
                                6. 定义添加书籍页面的路由处理函数:
                                @app.route("https://blog.csdn.net/add_book", methods=["GET", "POST"])
                                def add_book():
                                    if request.method == "POST":
                                        name = request.form["name"]
                                        author = request.form["author"]
                                        comment = request.form["comment"]
                                        connection = pymysql.connect(**db_config)
                                        with connection.cursor() as cursor:
                                            cursor.execute("INSERT INTO books (name, author, comment) VALUES (%s, %s, %s)", (name, author, comment))
                                            connection.commit()
                                        connection.close()
                                        return "书籍添加成功!"
                                    return render_template("add_book.html")
                                
                                • 同样使用@app.route()修饰器,设置URL路径为’https://blog.csdn.net/add_book’的路由,同时指定支持GET和POST请求方法。
                                • 通过判断请求方法,当为POST方法时,从表单中获取书籍的名称、作者和备注信息。
                                • 连接到MySQL数据库,并使用cursor对象执行SQL插入语句将书籍信息插入到books表中,然后提交更改。
                                • 关闭数据库连接并返回一个成功添加书籍的消息。
                                • 当请求方法为GET时,返回渲染后的add_book.html模板。
                                  7. 定义借阅书籍页面的路由处理函数:
                                  @app.route("https://blog.csdn.net/lend_book", methods=["GET", "POST"])
                                  def lend_book():
                                      if request.method == "POST":
                                          name = request.form["name"]
                                          connection = pymysql.connect(**db_config)
                                          with connection.cursor() as cursor:
                                              # 检查图书是否存在
                                              cursor.execute("SELECT * FROM books WHERE name = %s", [name])
                                              result = cursor.fetchone()
                                              if not result:
                                                  connection.close()
                                                  return "图书不存在!"
                                              # 检查图书是否已被借阅
                                              state = result[4]  # 获取状态值的索引为4
                                              if state == 1:
                                                  connection.close()
                                                  return "图书已被借阅!"
                                              # 更新图书状态为已借阅
                                              cursor.execute("UPDATE books SET state = 1 WHERE name = %s", [name])
                                              connection.commit()
                                          connection.close()
                                          return "借阅成功!借了不看会变胖噢~"
                                      return render_template("lend_book.html")
                                  
                                  • 同样使用@app.route()修饰器,设置URL路径为’https://blog.csdn.net/lend_book’的路由,同时指定支持GET和POST请求方法。
                                  • 通过判断请求方法,当为POST方法时,从表单中获取要借阅书籍的名称。
                                  • 连接到MySQL数据库,并使用cursor对象执行SQL更新语句将该书籍的状态设置为已借阅(state = 1),然后提交更改。
                                  • 关闭数据库连接并返回一个借阅成功的消息。
                                  • 增加了一些容错处理,比如图书不存在的或者已被借出去的情况。
                                  • 当请求方法为GET时,返回渲染后的lend_book.html模板。
                                    8. 定义归还书籍页面的路由处理函数:
                                    @app.route("https://blog.csdn.net/return_book", methods=["GET", "POST"])
                                    def return_book():
                                        if request.method == "POST":
                                            name = request.form["name"]
                                            connection = pymysql.connect(**db_config)
                                            with connection.cursor() as cursor:
                                                cursor.execute("UPDATE books SET state = 0 WHERE name = %s", [name])
                                                connection.commit()
                                            connection.close()
                                            return "归还成功!"
                                        return render_template("return_book.html")
                                    
                                    • 同样使用@app.route()修饰器,设置URL路径为’https://blog.csdn.net/return_book’的路由,同时指定支持GET和POST请求方法。
                                    • 通过判断请求方法,当为POST方法时,从表单中获取要归还书籍的名称。
                                    • 连接到MySQL数据库,并使用cursor对象执行SQL更新语句将该书籍的状态设置为未借阅(state = 0),然后提交更改。
                                    • 关闭数据库连接并返回一个归还成功的消息。
                                    • 当请求方法为GET时,返回渲染后的return_book.html模板。
                                      9. 启动Flask应用程序:
                                      if __name__ == "__main__":
                                          app.run()
                                      
                                      10.服务端完整代码:
                                      from flask import Flask, render_template, request
                                      import pymysql
                                      app = Flask(__name__)
                                      # 配置 MySQL 数据库连接
                                      db_config = {
                                          'host': "XXXXXX",  # 此处填写你自己的TDSQL-C的外网host
                                          'port': xxxx,   # 此处填写你自己的TDSQL-C的外网端口号
                                          'user': "root",  # 你申请时候设置的用户名,默认是root
                                          'password': "",  # 密码就是你自己创建实例时的密码
                                          'database': 'library', # 这里需要在自己的TDSQL-C中创建一个数据库,名字为:"library" , 
                                      }
                                      # 检查数据库中是否存在 'books' 表格,如果不存在则创建它
                                      connection = pymysql.connect(**db_config)
                                      with connection.cursor() as cursor:
                                          cursor.execute("SHOW TABLES LIKE 'books'")
                                          result = cursor.fetchone()
                                          if not result:
                                              cursor.execute(
                                                  """
                                                  CREATE TABLE books (
                                                      id INT AUTO_INCREMENT PRIMARY KEY,
                                                      name VARCHAR(255) NOT NULL,
                                                      author VARCHAR(255) NOT NULL,
                                                      comment TEXT,
                                                      state INT DEFAULT 0
                                                  )
                                                  """
                                              )
                                              connection.commit()
                                      connection.close()
                                      @app.route("/")
                                      def index():
                                          return render_template("index.html")
                                      @app.route("https://blog.csdn.net/show_books")
                                      def show_books():
                                          connection = pymysql.connect(**db_config)
                                          with connection.cursor() as cursor:
                                              cursor.execute("SELECT * FROM books")
                                              books = cursor.fetchall()
                                          connection.close()
                                          return render_template("show_books.html", books=books)
                                      @app.route("https://blog.csdn.net/add_book", methods=["GET", "POST"])
                                      def add_book():
                                          if request.method == "POST":
                                              name = request.form["name"]
                                              author = request.form["author"]
                                              comment = request.form["comment"]
                                              connection = pymysql.connect(**db_config)
                                              with connection.cursor() as cursor:
                                                  cursor.execute("INSERT INTO books (name, author, comment) VALUES (%s, %s, %s)", (name, author, comment))
                                                  connection.commit()
                                              connection.close()
                                              return "书籍添加成功!"
                                          return render_template("add_book.html")
                                      @app.route("https://blog.csdn.net/lend_book", methods=["GET", "POST"])
                                      def lend_book():
                                          if request.method == "POST":
                                              name = request.form["name"]
                                              connection = pymysql.connect(**db_config)
                                              with connection.cursor() as cursor:
                                                  # 检查图书是否存在
                                                  cursor.execute("SELECT * FROM books WHERE name = %s", [name])
                                                  result = cursor.fetchone()
                                                  if not result:
                                                      connection.close()
                                                      return "图书不存在!"
                                                  # 检查图书是否已被借阅
                                                  state = result[4]  # 获取状态值的索引为4
                                                  if state == 1:
                                                      connection.close()
                                                      return "图书已被借阅!"
                                                  # 更新图书状态为已借阅
                                                  cursor.execute("UPDATE books SET state = 1 WHERE name = %s", [name])
                                                  connection.commit()
                                              connection.close()
                                              return "借阅成功!借了不看会变胖噢~"
                                          return render_template("lend_book.html")
                                      @app.route("https://blog.csdn.net/return_book", methods=["GET", "POST"])
                                      def return_book():
                                          if request.method == "POST":
                                              name = request.form["name"]
                                              connection = pymysql.connect(**db_config)
                                              with connection.cursor() as cursor:
                                                  cursor.execute("UPDATE books SET state = 0 WHERE name = %s", [name])
                                                  connection.commit()
                                              connection.close()
                                              return "归还成功!"
                                          return render_template("return_book.html")
                                      if __name__ == "__main__":
                                          app.run()
                                      

                                      注意:

                                      数据库相关的配置,需要修改为自己申请TDSQL-C时候的相关参数。

                                      运行项目

                                      将前后端代码都准备好,并且确认项目目录结构没问题之后,直接运行app.py即可成功运行项目,运行效果图见下方:

                                      在这里插入图片描述

                                      刚进来之后,是没有图书的,所以显示图书的时候,是空的。

                                      添加图书效果

                                      点击添加图书,然后新增三个图书,看看TDSQL-C中是否增加了相关数据。

                                      图书数据:

                                      书名:'惶然录',作者:'费尔南多·佩索阿',描述:'一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。'
                                      书名:'以箭为翅',作者:'简媜',描述:'调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。'
                                      书名:'心是孤独的猎手',作者:'卡森·麦卡勒斯',描述:'我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。'
                                      

                                      如果会使用本地工具连接mysql的同学,可以自己连接进行查看数据,比如我用的Navicat,效果如下:

                                      在这里插入图片描述

                                      如果不会用的小伙伴也不用惊慌,TDSQL-C贴心准备了线上工具,可以直接在网页上就能查看,具体操作如下:

                                      点击登录在这里插入图片描述

                                      输入自己设置的用户名和密码进行登录:

                                      在这里插入图片描述

                                      登录成功后:

                                      在这里插入图片描述

                                      选择library数据库

                                      在这里插入图片描述

                                      可以看到下面有books表,然后双击这个表即可查看其中的信息:

                                      在这里插入图片描述

                                      关闭右边的弹窗,即可看出我们刚刚添加的数据:

                                      在这里插入图片描述

                                      可以看到,添加书籍OK了。

                                      展示图书

                                      这时候我们点击浏览器的后退键,或者再次访问项目的本地地址:http://127.0.0.1:5000,进入到主菜单,选择显示图书,就可以看到刚刚添加的图书。效果图:

                                      在这里插入图片描述

                                      借阅图书

                                      接下来我们借阅一本《以箭为翅》,然后再查看一下数据。

                                      在这里插入图片描述

                                      在这里插入图片描述

                                      提示借阅成功了,我们看看数据库的数据是否改变了。

                                      在这里插入图片描述

                                      可以看到,数据已经修改了,以箭为翅的 state 修改为了1

                                      0代表未借出,1代表已借出.

                                      归还图书

                                      接下来我们把刚借阅的《以箭为翅》进行归还,然后再查看一下数据。

                                      在这里插入图片描述

                                      在这里插入图片描述

                                      归还成功了,这时候看一下数据库数据是否改变了。

                                      在这里插入图片描述

                                      可以看到,数据已经更新了。

                                      注意:在数据库中查看数据的时候,最好先刷新一下,然后再查看,才能保障看到的是最新数据。

                                      至此,项目已经完整的搭建完毕,并且验证完毕了,撒花~

                                      删除TDSQL

                                      如果只是想体验一下的小伙伴,体验完成之后,为了避免不必要的扣费风险,可以将这个实例进行删除。

                                      如果有的小伙伴觉得用的还不错,可能会长期使用,那就直接忽略这步。

                                      点击“销毁、退款”

                                      在这里插入图片描述

                                      看清楚弹窗的提示,然后勾选同意协议,点击确定。在这里插入图片描述

                                      然后实例状态变为这样:

                                      在这里插入图片描述

                                      等待一会儿即可销毁成功了。

                                      总结与分析

                                      本项目只是让大家可以对TDSQL-C有一个基本的认识,它使用起来基本上没有什么门槛,和本地的mysql几乎一样,但是它是基于云服务的,可以让你的很多梦想得以实现。使用它,你可以随时随地连接自己的数据库,激发自己更多的灵感和使用场景!

                                      当然,TDSQL-C的功能绝不止这么简单,它除了功能使用上没有门槛之外,性能也非常强劲,而且配备了齐全的异常监控系统,容灾备份功能,让你无论想怎么用都没办法拒绝它!

                                      体验了一把TDSQL-C,简单的分析一下它的优缺点:

                                      优点:

                                      1. 灵活的计费模式:TDSQL-C采用Serverless架构,按量付费,避免了中小公司承担过多的人力成本和运维成本。这意味着你可以根据实际使用的资源进行付费,降低了成本,同时在空闲时还可以自动休眠,减少不必要的费用。就像是一个聪明的小助手,帮你合理控制开支。
                                      2. 高性能和海量存储:TDSQL-C不仅表现出色的高性能,而且还提供海量存储空间。这意味着它可以处理各种大流量场景,让你不再为数据库的性能和存储容量而担心。它就像是一个强壮的运动员,能够应对各种挑战。
                                      3. 完备的产品和智能工具:TDSQL-C不仅仅是提供数据库服务,还提供了丰富的可视化管理工具和辅助工具。无需下载数据库管理客户端,你可以直接进行库表级操作、实时监控、实例会话管理等操作。此外,智能监控和健康管理分析等功能也能帮助你更好地管理数据库。就像是一个细心周到的管家,让你的数据管理变得更加轻松愉快。

                                      缺点:

                                      尽管TDSQL-C具有许多优点,但也存在一些缺点需要考虑:

                                      1. 依赖云服务:TDSQL-C是腾讯云提供的数据库解决方案,因此它对于想要使用它的用户来说,他们必须依赖于腾讯云的平台和服务。这可能会限制了用户对数据库的控制权和自由度,以及对基础设施的选择。
                                      2. 可能出现延迟:由于TDSQL-C是基于云服务的,因此在访问和处理数据时可能会受到网络延迟的影响。特别是对于一些对实时性要求较高的应用场景来说,延迟可能成为一个问题,并且可能会影响系统的响应速度和用户体验。
                                      3. 安全性风险:使用云服务意味着将数据存储在第三方的服务器上,在数据传输和存储过程中可能涉及到一些安全性风险。虽然腾讯云采取了各种安全措施,但仍然无法完全消除潜在的数据泄露或攻击风险。因此,对于安全性要求较高的企业或应用来说,可能需要做出额外的安全措施和评估。

                                      这些是TDSQL-C的一些缺点,需要在选择和使用时予以考虑。综合考虑其优点和缺点,根据具体需求做出权衡和决策。