ketyiaの作ってみた

このサイトでは作ってみたことを記事にまとめていきます!

AzureでDB操作 ~PostgreSQL~


こんにちは!

Azureを勉強中でして、DBの操作について学んだのでアウトプットしようと記事を書いていきます。

本記事では、AzureのPostgreSQLDBをFlaskで操作する方法をまとめていきます。

AzureでPostgreSQLサービスをスタート


Azureのサイトから「Azure Database for PostgreSQL」から作成を行います。

サブスクリプションやサーバ情報、管理者のパスワード等の必須項目の情報を入力してデプロイします。

デプロイ完了後、データベースを作成します。
「設定」→「データベース」から任意の名前で保存を行います!

次に、接続の情報を取得します。下記の画像の赤くマスキングしているところに情報が載っています!

 

ローカルからデータベースの接続


他に方法があるのかもしれませんが、ローカルにPostgreSQLをインストールして接続し、テーブル作成の操作を行うという方法を私は採用しています。

PostgreSQLをダウンロードします。
本記事では紹介しませんが、色々なサイトで紹介されているので各々やっていただけると助かります。。

問題なくインストールできますと、「Program Files」配下にPostgreSQLのフォルダーがあるはずです。(widowsの場合) そこから、「PostgreSQL\{バージョン}\pgAdmin 4\runtime\pgAdmin4.exe」を起動します。

pgAdmin4内で「サーバ」を右クリック>「Register」>「server」で「コネクション」にAzureで構築したDBの情報を入力します。

これで接続できるはずです。


今回操作するテーブルは、ブログを管理するものとします

db名から右クリックで「Create Script」で下記コードを実行します。

CREATE TABLE blogs (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255),
    url VARCHAR(255),
    image_name VARCHAR(255),
    description TEXT
);


これで環境準備完了です。

Flaskでコーディング


このFlaskもRESTとして動かしていきます。
コードは下記のように書きました。

from flask import Flask, request, jsonify
from flask_restful import Resource, Api
from flask_sqlalchemy import SQLAlchemy

 

app = Flask(__name__)
api = Api(app)

 

#下記はAzureのDB情報を入力してください
user = "your_username"
password = "your_password"
dbname = "your_database_name"

 

postgresql = f'postgresql://{user}:{password}@{localhost}/{dbname}'

 

app.config['SQLALCHEMY_DATABASE_URI'] = postgresql
db = SQLAlchemy(app)

 

class Blog(db.Model):
    __tablename__ = 'blogs'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    name = db.Column(
        db.String(255),
        nullable=False
    )
    url = db.Column(
        db.String(255),
        nullable=False
    )
    image_name = db.Column(
        db.String(255),
        nullable=False
    )
    description = db.Column(
        db.Text,
        nullable=False
    )

 

@app.route('/blogs', methods=['POST'])
def create_blog():
    data = request.get_json()
   
    new_blog = Blog(
        name=data['name'],
        url=data['url'],
        image_name=data['image_name'],
        description=data['description']
    )

 

    db.session.add(new_blog)
    db.session.commit()
    return jsonify({'message': 'New blog created!'}), 201

 

@app.route('/blogs', methods=['GET'])
def get_blogs():
    blogs = Blog.query.all()
    output = []
    for blog in blogs:
        blog_data = {
            'name': blog.name,
            'url': blog.url,
            'image_name': blog.image_name,
            'description': blog.description
        }
        output.append(blog_data)
    return jsonify({'blogs': output})

 

if __name__ == '__main__':
    app.run(debug=True)


上記を実行し、下記JsonをPOSTで渡します!

[
    {
        "name": "Azureの生成AIを試してみた! ~Azure OpenAI ChatGPT~",
        "url": "https://begginerkun.hatenablog.com/entry/2023/12/15/232219",
        "image_name": "1.png",
        "description": "Azureの生成AIのOpenAIのChatGPTを試用し、Flask言語に連携をして日記の生成を試みた議事録です"
    },
    {
        "name": "Azureの生成AIを試してみた! ~Azure OpenAI DALL-E-3~",
        "url": "https://begginerkun.hatenablog.com/entry/2023/12/16/222604",
        "image_name": "2.png",
        "description": "Azureの生成AI、DALL-E-3を試用し、Flask言語に連携をして日記の文字から画像生成を試みた議事録です"
    },
    {
        "name": "Azureでサイト公開 ~バックエンド(Flask)~",
        "url": "https://begginerkun.hatenablog.com/entry/2024/01/07/172430",
        "image_name": "3.png",
        "description": "AzureのAzure Web App Serviceを使用して、FlaskをRESTAPIとしての公開を試みた議事録"
    },
    {
        "name": "Azureでサイト公開 ~フロント(Next.js)~",
        "url": "https://begginerkun.hatenablog.com/entry/2024/01/10/140951",
        "image_name": "4.png",
        "description": "AzureのAzure Static Web Appsを使用して、Next.jsをフロントサイドとしての公開を試みた議事録"
    }
]


POSTMANを使用してAPIテストをします。
下記のように一つ一つ入力していきます。


データベースにも値が入っているか確認もしておきます!


しっかり登録できてましたね!
次に、GETでデータを取得できるかのAPIテストです。


受け取れてますね!
これでAzureのPostgreSQLを使用して、FlaskのDB操作を行うことができました!

今回はコスト面を考えてPostgreSQLを選択しましたが、コスト面とか色々な側面で色々なDBの選択をするべきですね。。あまりそこらへん考えずに選択してしまったのが今回少し反省です。。

まとめ


本記事でAzureサービスのDB操作を体験することができました。
使ってて、ネットワークからの設定にもよりますがどこからでもアクセスできる点がとても強いなと感じました。クラウド強しですね!

ここまで読んでいただきありがとうございました!