TDSOL是腾讯云自家研发的超级厉害的云原生关系型数据库!它将传统数据库、云计算和最新的硬件技术融合在一起,完美兼容MySQL,并为用户提供了绝对牛逼的弹性、高性能、高可用、高可靠和安全的数据库服务。你绝对想不到,它的吞吐量可以达到超过百万次查询每秒!而且还支持海量数据的分布式智能存储,就像PB级别的大海一样。天啊,还有Serverless秒级伸缩,企业要加速数字化转型简直不要太方便!
说到Serverless服务,你绝对没见过腾讯云自家的TDSQL-C无服务器架构版!这个可是全球首款全Serverless架构的云原生数据库哦!说白了,就是使用Serverless服务,你只需按实际使用的计算和存储资源付费,不用的时候完全不用担心花冤枉钱!这种云原生技术真是超级贴心,谁用谁知道!现在,腾讯云的云优势将普惠到更多的用户,就像演唱会门票一样抢手!
腾讯云登录:https://cloud.tencent.com/
**注意 **:这里的实例形态我们选择Serverless
- 实例形态 **(Serverless)** - 数据库引擎 **(MYSQL)** - 地域 **(北京)** *地域这里根据自己的实际情况选择即可* - 主可用区 **(北京三区)** *主可用区这里根据自己的实际情况选择即可* - 多可用区部署 **(否)** - 传输链路 - 网络 - 数据库版本 **(MySQL5.7)** - 算力配置 **最小(0.25) , 最大(0.5)** - 自动暂停 **根据自己需求配置即可** - 计算计费模式 **(按量计费)** - 存储计费模式 **(按量计费)**
配置截图如下:
此处需要注意:表名大小写选择不敏感即可,另外设置自己的数据库密码,其他的按照默认值即可。>
我的配置截图如下:
注意!!读写示例这里,需要点击开启外网访问
点击确定即可。
稍等片刻,就会出现可以外网访问的host和端口了,请记好你的地址和端口,后续会用到。
至此,准备工作结束!
现在正式开始搭建项目。
此项目仅为demo,供娱乐学习使用,本项目主要用python flask来搭建,用pymysql库来连接TDSQL-C产品进行操作数据库,麻雀虽小五脏俱全!
接下来就让我们一步步来实现!
项目文件目录如下:
其中app.py为服务端文件,
templates文件夹中的html文件都是前端页面模板文件,供flask调用的。
结构比较简单,项目主要文件就是这几个。
由于是用python flask框架搭建,所以需要在项目下面创建一个templates文件夹,将对应的模板html文件放入到其中,方便进行调用。
前端页面的逻辑都比较简单,就不详细展开讲了,我会将讲解的重点放在后端连接数据库以及对数据库的操作上。
这几个html页面的代码以及运行后的效果分别截图如下:
代码:
图书管理系统 图书管理系统
代码:
添加图书 添加图书
代码:
借阅图书 借阅图书
代码:
归还图书 归还图书
代码:
图书列表 图书列表
ID | 书名 | 作者 | 评论 | 状态 |
---|---|---|---|---|
{{ book[0] }} | {{ book[1] }} | {{ book[2] }} | {{ book[3] }} | {% if book[4] == 1 %}已借出{% else %}未借出{% endif %} |
由于是用python flask框架来写服务端接口,使用pymysql包来进行连接数据库(也就是今天的主角!咱们今天开通的TDSQL-C)
本次实现的功能中,前端需要调用的接口有:
由于是从数据库中进行书籍的读取和写入以及修改,所以还需要连接到数据库。
那么如何连接到数据库(TDSQL-C)呢?
使用pymysql库即可用python方便的连接到mysql数据库,当然也可以连接到TDSQL-C啦!
接下来就一步一步带着你来进行代码实现:
咱们这个项目是使用Flask框架来创建一个简单的图书馆管理系统。下面我们一步一步来实现功能:
from flask import Flask, render_template, request import pymysql
app = Flask(__name__)
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()
需要在自己申请的TDSQL-C实例中新建一个数据库,具体操作见下图:
这样就创建好了library数据库,后续我们增加的图书,都会在这个库里的books表里。(代码中有创建books表的逻辑,无需手动创建,如果创建了也不影响,做了兼容,但是名字必须叫books。)
@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()
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-C有一个基本的认识,它使用起来基本上没有什么门槛,和本地的mysql几乎一样,但是它是基于云服务的,可以让你的很多梦想得以实现。使用它,你可以随时随地连接自己的数据库,激发自己更多的灵感和使用场景!
当然,TDSQL-C的功能绝不止这么简单,它除了功能使用上没有门槛之外,性能也非常强劲,而且配备了齐全的异常监控系统,容灾备份功能,让你无论想怎么用都没办法拒绝它!
体验了一把TDSQL-C,简单的分析一下它的优缺点:
尽管TDSQL-C具有许多优点,但也存在一些缺点需要考虑:
这些是TDSQL-C的一些缺点,需要在选择和使用时予以考虑。综合考虑其优点和缺点,根据具体需求做出权衡和决策。