記事ディレクトリ
序文
TDSOL は、Tencent Cloud によって開発された超強力なクラウドネイティブ リレーショナル データベースです。従来のデータベース、クラウド コンピューティング、最新のハードウェア テクノロジーを統合し、MySQL と完全に互換性があり、ユーザーに非常に優れた弾力性、高性能、高可用性、高信頼性、セキュリティのデータベース サービスを提供します。そのスループットが 1 秒あたり 100 万クエリを超えるとは想像もできないでしょう。また、ペタバイトレベルの海洋のような大量のデータの分散インテリジェントストレージもサポートしています。なんと、数秒でサーバーレス スケーリングも可能です。企業がデジタル トランスフォーメーションを加速するにはあまり便利ではありません。
サーバーレス サービスといえば、Tencent Cloud 独自の TDSQL-C サーバーレス アーキテクチャ バージョンを見たことがありません。これは世界初の完全なサーバーレス アーキテクチャのクラウド ネイティブ データベースです。端的に言えば、サーバーレス サービスを使用する場合、実際に使用するコンピューティング リソースとストレージ リソースの料金のみを支払う必要があり、使用しないときにお金を無駄にすることを心配する必要はありません。この種のクラウド ネイティブ テクノロジーは本当に非常に配慮されており、使用する人なら誰でもそれを認識します。現在、Tencent Cloud のクラウドの利点はより多くのユーザーに恩恵をもたらし、コンサート チケットと同じくらい人気があります。
ステップ
準備
TDSQL-C データベースを申請します。
1. クリックして Tencent Cloud にログインします
Tencent Cloud ログイン: https://cloud.tencent.com/
2. 次の図に示すように、製品を選択し、「tdsql」を検索して、TDSQL-C を選択します。
3. クリックして今すぐ購入
4. 購入ページのデータベース構成オプションは次のとおりです。
**注意**: ここではインスタンス フォームとしてサーバーレスを選択します。
- 实例形态 **(Serverless)**
- 数据库引擎 **(MYSQL)**
- 地域 **(北京)** *地域这里根据自己的实际情况选择即可*
- 主可用区 **(北京三区)** *主可用区这里根据自己的实际情况选择即可*
- 多可用区部署 **(否)**
- 传输链路
- 网络
- 数据库版本 **(MySQL5.7)**
- 算力配置 **最小(0.25) , 最大(0.5)**
- 自动暂停 **根据自己需求配置即可**
- 计算计费模式 **(按量计费)**
- 存储计费模式 **(按量计费)**
構成のスクリーンショットは次のとおりです。
5. 「次へ」をクリックして基本情報を構成します
ここで注意してください: テーブル名の大文字と小文字を区別しないようにし、独自のデータベース パスワードを設定し、残りはデフォルト値に従ってください。>
私の構成のスクリーンショットは次のとおりです。
6. [今すぐ購入] をクリックし、ポップアップ ウィンドウで [今すぐ購入] を選択してアクティブ化します。
7. アクティベーションが正常に完了しましたので、クリックすると管理ページに移動します。
知らせ!!読み取りと書き込みの例はここにあります。クリックして外部ネットワーク アクセスを開く必要があります
「OK」をクリックするだけです。
しばらくすると、外部ネットワークからアクセスできるホストとポートが表示されますので、後で使用するのでアドレスとポートを覚えておいてください。
ここまでで準備作業は終了です!
ここで正式にプロジェクトの構築を開始します。
オンライン図書館管理システム構築プロジェクト
プロジェクトの目的:
このプロジェクトは、娯楽と学習のための単なるデモです。このプロジェクトは、主に Python flask で構築されており、pymysql ライブラリを使用して TDSQL-C 製品に接続し、データベースを操作します。スズメは小さいですが、内臓はすべて揃っています。 !
次に、それを段階的に実装してみましょう。
プロジェクトの作成
プロジェクト ファイル ディレクトリは次のとおりです
。app.py はサーバー ファイルで、
テンプレート フォルダー内の html ファイルは flask が呼び出すフロントエンド ページのテンプレート ファイルです。
構造は比較的単純で、これらが主なプロジェクト ファイルです。
フロントエンドページの構築
Python flask フレームワークを使用して構築されているため、簡単に呼び出せるように、プロジェクトの下に templates フォルダーを作成し、対応するテンプレート html ファイルをその中に置く必要があります。
フロントエンド ページのロジックは比較的単純なので詳細は説明しませんが、データベースへのバックエンド接続とデータベースの操作に焦点を当てます。
これらの HTML ページのコードと実行後の効果のスクリーンショットは次のとおりです。
Index.html ページ
コード:
<!DOCTYPE html>
<html>
<head>
<title>图书管理系统</title>
</head>
<body>
<h1>图书管理系统</h1>
<ul>
<li><a href="/show_books">显示图书</a></li>
<li><a href="/add_book">添加图书</a></li>
<li><a href="/lend_book">借阅图书</a></li>
<li><a href="/return_book">归还图书</a></li>
</ul>
</body>
</html>
add_books.html ページ
コード:
<!DOCTYPE html>
<html>
<head>
<title>添加图书</title>
</head>
<body>
<h1>添加图书</h1>
<form method="POST" action="/add_book">
<label for="name">书名:</label>
<input type="text" id="name" name="name"><br><br>
<label for="author">作者:</label>
<input type="text" id="author" name="author"><br><br>
<label for="comment">评论:</label>
<textarea id="comment" name="comment"></textarea><br><br>
<input type="submit" value="添加">
</form>
</body>
</html>
lend_books.html ページ
コード:
<!DOCTYPE html>
<html>
<head>
<title>借阅图书</title>
</head>
<body>
<h1>借阅图书</h1>
<form method="POST" action="/lend_book">
<label for="name">书名:</label>
<input type="text" id="name" name="name"><br><br>
<input type="submit" value="借阅">
</form>
</body>
</html>
return_books.html ページ
コード:
<!DOCTYPE html>
<html>
<head>
<title>归还图书</title>
</head>
<body>
<h1>归还图书</h1>
<form method="POST" action="/return_book">
<label for="name">书名:</label>
<input type="text" id="name" name="name"><br><br>
<input type="submit" value="归还">
</form>
</body>
</html>
show_books.html ページ
コード:
<!DOCTYPE html>
<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table>
<tr>
<th>ID</th>
<th>书名</th>
<th>作者</th>
<th>评论</th>
<th>状态</th>
</tr>
{
% for book in books %}
<tr>
<td>{
{
book[0] }}</td>
<td>{
{
book[1] }}</td>
<td>{
{
book[2] }}</td>
<td>{
{
book[3] }}</td>
<td>{
% if book[4] == 1 %}已借出{
% else %}未借出{
% endif %}</td>
</tr>
{
% endfor %}
</table>
</body>
</html>
サーバーインターフェース構築
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 アプリケーションを作成します。
- HTML テンプレートをレンダリングするための render_template メソッドをインポートします。
- MySQL データベースに接続して操作するには、pymysql ライブラリをインポートします。
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インスタンスにデータベースを新規作成する必要がありますが、具体的な操作は下図のとおりです。
このようにして、図書館データベースが作成され、今後追加される書籍はこの図書館の書籍テーブルに追加されます。(コード内にbooksテーブルを作成するロジックがあります。手動で作成する必要はありません。作成されても影響を受けません。互換性がありますが、名前はbooksである必要があります。)
4. ホームページのルーティング処理関数を定義します。
@app.route("/")
def index():
return render_template("index.html")
- デコレータを使用して
@app.route("/")
、URL パスをルート パス '/' に設定します。 - 「index」という名前の関数が定義されており、ユーザーがルート パスにアクセスすると、レンダリングされたindex.html テンプレートが返されます。
5. 本のページを表示するためのルーティング処理関数を定義します。
@app.route("/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 パス「/show_books」でルートを設定します。 - この関数では、まず MySQL データベースに接続します。
- カーソルオブジェクトを使用してSQLクエリ文「SELECT * FROM Books」を実行し、すべての書籍のデータを取得します。
- 接続を閉じた後、レンダリングのために書籍データを show_books.html テンプレートに渡します。
6. 書籍ページを追加するためのルーティング処理関数を定義します。
@app.route("/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 パスを持つルートを「/add_book」に設定し、GET および POST リクエスト メソッドがサポートされることを指定します。 - リクエストメソッドを判断し、POSTメソッドの場合はフォームから書籍の名前、著者、備考情報を取得します。
- MySQL データベースに接続し、カーソル オブジェクトを使用して SQL 挿入ステートメントを実行し、書籍情報を書籍テーブルに挿入し、変更をコミットします。
- データベース接続を閉じ、書籍が正常に追加されたことを示すメッセージを返します。
- リクエストメソッドが GET の場合、レンダリングされた add_book.html テンプレートが返されます。
7. 借りた書籍ページのルーティング処理関数を定義します。
@app.route("/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 パス「/lend_book」でルートを設定し、GET および POST リクエスト メソッドがサポートされることを指定します。 - リクエストメソッドを判断し、POSTメソッドの場合はフォームから借りたい本の名前を取得します。
- MySQL データベースに接続し、カーソル オブジェクトを使用して SQL 更新ステートメントを実行し、本のステータスを借用 (状態 = 1) に設定し、変更をコミットします。
- データベース接続を閉じ、借用成功メッセージを返します。
- 本が存在しない場合やチェックアウトされている場合など、フォールトトレラントな処理がいくつか追加されました。
- リクエストメソッドがGETの場合、レンダリングされたlend_book.htmlテンプレートが返されます。
8. 返品書籍ページのルーティング処理関数を定義します。
@app.route("/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 パス「/return_book」でルートを設定し、GET および POST リクエスト メソッドがサポートされることを指定します。 - リクエストメソッドを判断し、POSTメソッドの場合はフォームから返却する書籍名を取得します。
- MySQL データベースに接続し、カーソル オブジェクトを使用して SQL 更新ステートメントを実行し、本のステータスを未借用 (状態 = 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("/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("/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("/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("/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 を直接実行してプロジェクトを正常に実行します。実行結果を以下に示します。本が表示されているときは
空です。
本の効果を追加する
[ブックの追加] をクリックし、3 冊のブックを追加して、関連するデータが TDSQL-C に追加されているかどうかを確認します。
書籍データ:
书名:'惶然录',作者:'费尔南多·佩索阿',描述:'一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。'
书名:'以箭为翅',作者:'简媜',描述:'调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。'
书名:'心是孤独的猎手',作者:'卡森·麦卡勒斯',描述:'我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。'
ローカル ツールを使用して mysql に接続する方法を知っている場合は、自分で接続してデータを表示できます。たとえば、Navicat を使用します。効果は次のとおりです。
TDSQL-C には、Web ページ上で直接閲覧できるオンライン ツールが用意されています。具体的な操作は次のとおりです。クリックしてログインし、ユーザー名を入力してください
。
ログインに成功し
た後:
図書館データベースを選択する
と、下の書籍テーブルが表示されます。次に、このテーブルをダブルクリックして情報を表示します:
右側のポップアップ ウィンドウを閉じると、データが表示されます。追加しました:
ご覧のとおり、本の追加は問題ありません。
展示本
この時点で、ブラウザの戻るボタンをクリックするか、プロジェクトのローカル アドレス http://127.0.0.1:5000 に再度アクセスし、メイン メニューに入り、[書籍の表示] を選択すると、追加したばかりの書籍が表示されます。 。レンダリング:
本を借りる
次に『矢の翼』を借りてデータを見てみます。
借用が成功したことを示すメッセージが表示されます。データベース内のデータが変更されたかどうかを確認してみましょう。
ご覧のとおり、データが変更され、矢印が翼になっている状態が 1 に変更されています。
0 は貸し出しなし、1 は貸し出しを意味します。
本を返す
次に、先ほど借りた「Arrows as Wings」を返却し、データを確認します。
復帰は成功しました。データベースのデータが変更されているかどうかを確認してください。
ご覧のとおり、データが更新されています。
注: データベース内のデータを表示する場合は、最初にデータを更新してから再度表示し、最新のデータが表示されていることを確認することをお勧めします。
この時点で、プロジェクトは完全に構築され、検証されました。花を広げてください~
削除TDSQL
体験だけしたい場合は、体験終了後、不必要な減点のリスクを避けるために、このインスタンスを削除できます。
友達がそれを使用するのが良いと感じており、長期間使用する可能性がある場合は、このステップを無視してください。
「破棄、返金」をクリック
ポップアップ ウィンドウのプロンプトをよく読み、チェックボックスをオンにして契約に同意し、[OK] をクリックします。
その後、インスタンスのステータスが次のように変わります。
しばらく待つと、インスタンスは正常に破棄されます。
要約と分析
このプロジェクトでは、誰もが TDSQL-C の基本を理解できるようにします。基本的に、TDSQL-C を使用するための敷居はありません。ローカルの mysql とほぼ同じですが、クラウド サービスに基づいており、多くの夢を実現できます。これを使用すると、いつでもどこでもデータベースに接続して、より多くのインスピレーションや使用シナリオを得ることができます。
もちろん、TDSQL-C の機能は単純なものではなく、その機能を使用するためのしきい値がないことに加えて、そのパフォーマンスも非常に強力であり、完全な例外監視システムやディザスター リカバリー バックアップ機能も備えており、なので、どのように使っても構いません。拒否してください。
私は TDSQL-C を経験し、その利点と欠点を簡単に分析しました。
アドバンテージ:
- 柔軟な請求モデル: TDSQL-C はサーバーレス アーキテクチャを採用しており、ボリュームに応じて料金を支払うため、中小企業が過剰な人件費や運用保守コストを負担することがなくなります。つまり、実際に使用したリソースに基づいて料金を支払うことができるため、コストが削減されると同時に、アイドル状態のときに自動的にスリープすることができるため、不要なコストが削減されます。出費を合理的に管理するのに役立つ、賢い小さなアシスタントのようなものです。
- 高性能と大容量ストレージ: TDSQL-C は、優れたパフォーマンスを発揮するだけでなく、大容量のストレージ容量も提供します。つまり、さまざまな大規模なトラフィック シナリオを処理できるため、データベースのパフォーマンスとストレージ容量を心配する必要がなくなります。それはさまざまな課題に対処できる強いアスリートのようなものです。
- 完全な製品とインテリジェントなツール: TDSQL-C はデータベース サービスを提供するだけでなく、豊富なビジュアル管理ツールや補助ツールも提供します。データベース管理クライアントをダウンロードする必要はなく、データベースのテーブルレベルの操作、リアルタイム監視、インスタンスセッション管理などを直接実行できます。さらに、インテリジェントな監視や健全性管理分析などの機能も、データベースをより適切に管理するのに役立ちます。注意深く思慮深い家政婦のようなもので、データ管理がより簡単かつ楽しくなります。
欠点:
TDSQL-C には多くの利点がありますが、考慮すべき欠点もいくつかあります。
- クラウド サービスへの依存: TDSQL-C は Tencent Cloud によって提供されるデータベース ソリューションであるため、それを使用したいユーザーは Tencent Cloud のプラットフォームとサービスに依存する必要があります。これにより、データベースとインフラストラクチャの選択に対するユーザーの制御と自由が制限される可能性があります。
- 遅延の可能性: TDSQL-C はクラウドベースのサービスであるため、データにアクセスして処理する際にネットワーク遅延の影響を受ける可能性があります。特にリアルタイム要件が高い一部のアプリケーション シナリオでは、遅延が問題となり、システムの応答速度やユーザー エクスペリエンスに影響を与える可能性があります。
- セキュリティ リスク: クラウド サービスを使用すると、データをサードパーティのサーバーに保存することになり、データの送信および保存中にセキュリティ リスクが伴う可能性があります。Tencent Cloud はさまざまなセキュリティ対策を講じていますが、潜在的なデータ漏洩や攻撃のリスクを完全に排除することはできません。したがって、より高いセキュリティ要件を持つ企業またはアプリケーションの場合は、追加のセキュリティ対策と評価が必要になる場合があります。
これらは、TDSQL-C の欠点の一部であり、TDSQL-C を選択して使用する際に考慮する必要があります。長所と短所を考慮し、特定のニーズに基づいてトレードオフと決定を行ってください。