Firebaseの代替バックエンド、Supabaseを使ってみよう

superbase

今日はSupabaseを紹介します。 「Supabase」は、オープンソースのプラットフォームで、バックエンドサーバー、データベース、認証、リアルタイムデータ、ストレージなどの機能を提供するBaaS(Backend as a Service)プロバイダーです。Supabaseは、アプリケーションの開発者がアプリケーションのバックエンド機能を迅速かつ簡単に構築および管理できるようにするために設計されています。 主な特徴と機能: Supabaseは、モダンなWebおよびモバイルアプリケーションのバックエンドを効率的に構築するための強力なツールとして広く利用されています。アプリケーションのバックエンドを設計、実装、デプロイするプロセスを簡素化し、開発者がフロントエンドに焦点を当てるのに役立ちます。 更にFirebaseではNoSQLしか提供していないのでPostgreSQLを使い方は必然的にこちらになりますね。 Supabaseのプロジェクトを始める では下記のサインインのページからSupabaseにサインインしましょう。 https://supabase.com/dashboard/sign-in? メールアドレスでサインアップしてもよいですし、GitGubのアカウントからサインインしてもOKですね。 サインイン後にダッシュボードからNew Projectを選択して新しいプロジェクトを作成しましょう。プロジェクトはOrganization(組織)に紐づくので組織を作成することになります。ここで無料のプランを選んでおきましょうね。 そのままDBのパスワードの設定の画面へ。 セットアップが完了するとダッシュボードのページにもどされ、APIキーやらが表示されます。 もちろん、公開しないこと! テーブルエディター 左側にあるメニューの上にテーブルエディターがあります。ここでUI上でPostgreSQLデータベースのテーブルを作成してデータを作成することもできますね。 Enable Row Level Security (RLS)とは Enable Row Level Security (RLS)は、テーブルへのアクセスを制限するためのセキュリティ機能です。RLSは行ベースのセキュリティ制御を提供し、データベース内の各行に対してアクセスポリシーを設定できます。この機能を有効にすることにより、データベースの安全性を向上させ、機密性の高いデータを保護できます。 RLSの利点は以下の通りです: RLSを有効にすると、ポリシーを設定してデータベースのセキュリティを強化できます。ポリシーは、特定のユーザーやロールに対するアクセス権を制御し、データのプライバシーとセキュリティを確保します。RLSは特に多くのユーザーやロールが存在し、データへの細かいアクセス制御が必要な場合に有用です。 データの挿入 次にInsertボタンを使って手動でデータを入力してみましょう。わかりやすいので説明不要ですね。 参考API 次に右上の<>APIのボタンをクリックします。 ここで使えるAPIの一覧が例で出てきます。

【埋め込みデータベース】Chromaとは

埋め込みデータベースとは 埋め込みデータベース(Embedding Database)は、データの特徴表現を効率的に保存・検索するためのデータベースです。埋め込み(Embedding)は、データを低次元のベクトル空間に変換する手法であり、データの意味や特徴を抽出した表現を得ることができます。 埋め込みデータベースは、一般的に機械学習や自然言語処理のタスクにおいて特に有用です。例えば、顔認識システムでは、顔画像を埋め込みベクトルに変換してデータベースに格納し、そのベクトルとの距離を計算することで、特定の人物の顔を識別することができます。また、文書の類似性検索では、文書を埋め込みベクトルに変換し、ベクトル間の距離を計算して類似した文書を検索することができます。 埋め込みデータベースは、高速な検索やクエリ処理を実現するために最適化されています。特に、近傍探索(Nearest Neighbor Search)などの高度な検索アルゴリズムが使用され、大規模なデータセットに対しても効率的な操作が可能です。 Chromaとは Chromaはオープンソースの埋め込みデータベースです。Chromaは、知識、事実、スキルをLLM(Language Model)にプラグイン可能にすることで、LLMアプリケーションの構築を容易にします。 Chromaは、以下のような機能を提供します: Chromaは、以下の点を重視しています: Chromaには、PythonクライアントSDK、JavaScript/TypeScriptクライアントSDK、およびサーバーアプリケーションが含まれています。 Chromaのインストール Python Pythonでは、Chromaはメモリ内またはクライアント/サーバーモード(アルファ版)で実行することができます。 メモリ内モードでは、Chromaはデータベースをメモリ内に展開し、データを高速に処理することができます。これは小規模なデータセットや一時的な処理に適しています。 クライアント/サーバーモードでは、Chromaはクライアントとサーバーの役割を分けて動作します。クライアントはPythonのChromaクライアントSDKを使用してデータベースにアクセスし、サーバーはChromaサーバーアプリケーションを実行してデータの永続的な保存と検索を担当します。これにより、大規模なデータセットや分散環境での処理が可能となります。 ただし、クライアント/サーバーモードは現在アルファ版であり、開発中の機能です。 Chromadbインストールのエラー 上記のコマンドでchromadbをインストールするとエラーがでるかもしれません。 エラーの原因一つの理由として、Pythonのバージョンがあげられます。最新のPythonをインストールして再度試してみましょう。 次にpipのバージョンも最新のものに更新しておきます。 ウィンドウズのビルドツールからMicrosoftのC++ビルドツールをインストールする このエラーについてはGitHubの ではこのリンクからMicrosoftのビルドツールをダウンロードします。 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 実行ファイルを起動してVisual Studio Installerを起動します。Modifyをクリックします。 次にIndivisual Componentsのタブから、MSVCのツールを探します。これは自分のマシンによって選択するものが変わりますが、Windowsの場合はx64/x86になります。 次にwindows11(若しくは10)のSDKを探しチェックします。 ではこの2つを選択した状態で右下のModifyのボタンを押しましょう。 では再度pip install chromadbのコマンドを実行します。 私の場合はこれでうまくいきました! これでもまだうまくいかない場合はGitHubのIssueを確認しましょう。 https://github.com/chroma-core/chroma/issues/189

Pineconeとは

Pineconeとは Pineconeは、機械学習のための高速でスケーラブルなベクトル検索エンジンです。ベクトル検索は、ベクトル表現でデータを表現し、ベクトル間の類似性を計算してデータを検索する技術です。 Pineconeは、大量のベクトルデータをリアルタイムで高速に検索することを目的としています。これには、機械学習モデルの埋め込み表現や特徴ベクトルなどのデータを含めることができます。例えば、製品の特徴ベクトルや顧客のプロファイルをPineconeに格納し、似たような製品や顧客を見つけるためにクエリを実行することができます。 Pineconeは、高速な類似性検索とスケーラビリティに優れており、リアルタイムのアプリケーションやサービスでの利用に適しています。また、Pineconeはクラウドベースのサービスとして提供されており、簡単に統合して利用することができます。 Pineconeは、機械学習エンジニアやデータサイエンティストが類似性検索やパターンマッチングを効率的に行うためのツールとして利用されています。また、個別のユースケースに応じて、推薦システム、自然言語処理、コンピュータビジョンなど、さまざまな分野で利用されています。 Pineconeの開発者 Pineconeは、アメリカの企業であるOpenAIによって開発されました。OpenAIは、人工知能(AI)の研究と開発を行う非営利団体および企業であり、AI技術の発展と普及に取り組んでいます。OpenAIは、GPT-3やGPT-3.5などの有名なAIモデルを開発したことでも知られています。 Pineconeは、OpenAIが開発したベクトル検索エンジンであり、その目的は高速かつ効率的なベクトルデータの検索と類似性の計算です。OpenAIは、Pineconeを利用することで、機械学習エンジニアやデータサイエンティストがリアルタイムで大規模なベクトルデータを処理し、高度な類似性検索やパターンマッチングを実現できるようにしました。 Vector Databaseとは Vector Database(ベクトルデータベース)は、ベクトル検索に特化したデータベースの一種です。通常のデータベースは、主にテキストや数値などの構造化データを格納・検索するために使用されますが、ベクトルデータベースでは、ベクトル表現でデータを格納し、ベクトル間の距離や類似性を計算してデータを検索することができます。 ベクトルデータベースは、大規模なベクトルデータセットを効率的に管理し、高速な類似性検索を実現することを目的としています。ベクトルデータベースは、ベクトルのインデックス化や効率的なベクトル検索アルゴリズムの実装に特化しており、従来のデータベースとは異なる要件に対応しています。 ベクトルデータベースは、機械学習の分野で広く活用されています。例えば、画像やテキストの埋め込みベクトル、音声や動画の特徴ベクトル、ユーザーのプロファイルなど、様々なタイプのベクトルデータを格納し、類似性検索やパターンマッチングを行うことができます。ベクトルデータベースは、リアルタイムなアプリケーションやサービスにおいて、高速かつスケーラブルなベクトル検索を可能にするために使用されます。 使われる用語 Pineconeを使用する際に関連する専門用語を以下に説明します。 Pineconeを使ってみよう ではPineconeのサイトにアクセスしてSign Up Freeのボタンからアカウントを作成しましょう。データの使用料や期間により有料になります。 では、GoogleやGitHubのアカウントでサインアップすることができるのでこれらのアカウントを使ってログインしましょう。 ログインするとAPI Keyが与えられるので自分のプロジェクトに使えるようになります。 PythonでPineconeにアクセスする方法 Pineconeにアクセスするためには、Pinecone Pythonクライアントを使用します。以下は、Pinecone Pythonクライアントを使用してPineconeデータにアクセスする方法の一般的な手順です。 上記の手順は一般的なPineconeデータの操作方法の例です。具体的なデータの構造や要件に応じて、より詳細な設定や操作を行うことができます。

MongoDBで使われるmongooseのフレームワークを解説

Mongoose

Mongooseは、MongoDBを操作するためのNode.js用のオブジェクトモデリングツールです。Mongooseは、MongoDBのドキュメントベースのデータモデリングをより簡単に行うための機能やAPIを提供しています。 mongooseの機能 具体的に、Mongooseは以下のような機能があります: Mongooseを使用することで、MongoDBの操作をより簡潔で直感的なコードで行うことができます。また、データモデルの定義やバリデーションのルールの管理、データの関連付けなどの作業も容易になります。 mongooseの開発者 Mongooseはオープンソースのプロジェクトで、開発と管理はGitHub上で行われています。Mongooseのリポジトリは、https://github.com/Automattic/mongoose で公開されており、オープンソースコミュニティによって管理されています。 Mongooseの初期バージョンは、オープンソースコミュニティのメンバーであるAaron Heckmannによって作成されました。その後、Mongooseは多くのプログラマーによって開発とメンテナンスが行われています。現在、Mongooseの主な管理は、オープンソース企業Automatticの一部であるMongooseチームによって行われています。 mongooseと相性の良いフレームワークは MongooseはMongoDBとの連携に特化したライブラリであり、主にNode.jsのバックエンドで使用されます。そのため、Node.jsベースのフレームワークと相性が良いです。以下に、Mongooseと相性の良いいくつかのNode.jsフレームワークをいくつか紹介します。 これらのフレームワークは、Mongooseとの連携を容易にするための豊富なエコシステムと共に利用されることが多いです。ただし、Mongooseは純粋なJavaScriptのMongoDBドライバーとも組み合わせて使用することができるので、他のフレームワークでも利用することは可能です。 mongooseの短所は MongooseはMongoDBとの連携を容易にする強力なツールですが、いくつかの短所もあります。 これらの短所は、Mongooseが提供する便利な機能と比較して考える必要があります。プロジェクトの要件やデータモデリングの複雑さに応じて、Mongooseを選択するかどうかを検討することが重要です。 ※ORMとは: ORM(オブジェクトリレーショナルマッピング)は、オブジェクト指向プログラミングとリレーショナルデータベースの間のデータ変換を自動化するテクニックやツールです。データベースではテーブルや関係でデータを扱いますが、オブジェクト指向プログラミングではデータをオブジェクトとして表現します。ORMはこのデータモデル間のマッピングを行い、オブジェクトとデータベースの相互変換を容易にします。開発者はORMを使用することで、データベースの詳細な操作やSQLクエリの作成と実行について意識する必要がなくなり、オブジェクト指向の方法でデータベースを操作できます。 オーバーヘッドとは: オーバーヘッド(Overhead)とは、ある処理や操作を実行する際に付随する余分なコストや負荷のことを指します。具体的には、時間、メモリ、リソースなどの面での追加的な負荷や消費を意味します。 まとめ Mongooseは非常に強力なツールであり、MongoDBとのインタラクションを簡素化するための優れたORM(オブジェクトリレーショナルマッパー)です。 Mongooseを学ぶことで、データベースの操作やデータモデリングをより効率的に行うことができます。Mongooseの豊富な機能を活用し、データベースのスキーマ定義、データの作成・読み取り・更新・削除、クエリの作成などを学びましょう。 Mongooseを学び始める前に、MongoDBの基礎知識を身につけることをお勧めします。MongoDBのドキュメントやチュートリアルを参照し、コレクション、ドキュメント、クエリの基本的な概念を理解しましょう。 次に、Mongooseのドキュメントを読み、APIの使い方や概念を学びましょう。モデルの作成、スキーマの定義、バリデーション、フック、クエリの実行などについて理解を深めましょう。 最終的には実際のプロジェクトでMongooseを使用してみることをおすすめします。 では、お疲れ様でした。

【MongoDBの基本コマンド】WindowsでMongndoDBのシェルを使う方法

mongoshの使い方

前回の記事ではwindowsのPCにMongoDBをインストールしてGUIから実際にデータを作成しました。 今回はコマンドラインを使ってMongoDBのデータ操作をしてみましょう。 なぜMongoDBのコマンドを学ぶべきなのか MongoDBのコマンドを学ぶことにはいくつかの理由があります。 これらの理由から、MongoDBのコマンドを学ぶことは、MongoDBデータベースの管理や操作、パフォーマンスの最適化、システム管理、自動化などに関わる様々なタスクを効果的に実行するために重要です。 MongoDBのコマンドは実際にJavaScriptでコードを書くときに役に立つ MongoDBのコマンドは実際にJavaScriptでコードを書く際に非常に役立ちます。 MongoDBはJavaScriptを使用して操作することができるため、MongoDBのコマンドをJavaScriptコードに組み込んで使用することができます。以下にいくつかの具体的な例を挙げます。 以上のように、MongoDBのコマンドをJavaScriptコードに組み込むことで、データベースの操作や管理、パフォーマンスの最適化、自動化などを効果的に実行することができます。 Windowsの環境変数にMongoDBを登録する では前回の記事でMongoDBをインストールしていることを前提にします。デフォルトでは下記のファイルパスが存在することを確認しましょう。 C:\Program Files\MongoDB\Server\6.0\bin 6.0はバージョン名なので、自分のバージョンにあったものがインストールされていればOkです。 次に公式ページからMongoDB Shellをダウンロードします。Zipファイルなので解凍してmongosh.exeファイルがあることを確認します。このmongosh.exeと一緒に入ってきたdll¥ファイルをC:\Program Files\MongoDB\Server\6.0\binに移動しておきましょう。 ではシステム環境変数に上記のパスを登録してwindowsが認識できるようにしてあげます。 ※私のPCが英語なので分かりづらくてすいません。。。 これでコマンドライン(コマンドプロンプト)からmongoshを入力するとMongoDBに接続できたことが分かりますね。 もしうまくいかない場合は直接mongosh.exeをクリックしてコマンドプロンプトが開くところから確認してください。これでmongoshが起動すれば実行ファイル自体は問題がないことが確認できます。 mognodbの基本コマンド mongoshを使用すると、MongoDBデータベースと対話的にやり取りすることができます。以下にいくつかの基本的なmongoshコマンドを示します。 mongoshを起動し、指定したホスト、ポート、およびデータベースに接続します。 接続されているサーバー上の利用可能なデータベースの一覧を表示します。 指定したデータベースに切り替えます。データベースが存在しない場合、新しいデータベースが作成されます。 現在のデータベース内のすべてのコレクションの一覧を表示します。 指定したコレクション内のドキュメントを検索します。クエリはドキュメントのフィルタリング条件を指定します。 指定したコレクションに単一のドキュメントを挿入します。 指定したコレクション内の最初にマッチしたドキュメントを更新します。フィルタは更新対象のドキュメントを絞り込むための条件を指定します。 指定したコレクション内の最初にマッチしたドキュメントを削除します。 実際にデータを操作してみる では上記のコマンドを例にデータを操作してみます。 “test>”は、mongoshシェルでデフォルトのデータベースが”test”に設定されている場合に表示されるプロンプトです。”test”はMongoDBのデフォルトのテスト用データベースです。 mongoshを起動し、デフォルトで使用するデータベースを指定しない場合、mongoshは”test”データベースをデフォルトで使用します。そのため、mongoshのプロンプトは “test>” と表示されます。 このプロンプトの下でコマンドを入力すると、”test”データベース内での操作やクエリが実行されます。ただし、別のデータベースを使用したい場合は、use データベース名コマンドを使用して切り替えることができます。 ではデータベースの一覧を見てみます。 このようにadminやconfigのデフォルトでついてくるデータベースが表示されました。newdbというのは前回に作成したデータベースです。 ではmydbという名前でデータベースを作成します。MongoDBではデータベース名が存在しない場合には新しいデータベースが作成されます。 ではこのようにmydbが作成されtestmydbに切り替わりました。 次にコレクションを作成します。コレクションはリレーショナルDBでいうテーブルのことです。例としてuserというコレクションを作成します。 このようにokが返ってきてDB操作に成功したことが分かりますね。 ドキュメントの挿入: 作成したコレクションにドキュメント(データ)を挿入します。以下は例です。 では先ほど作成したyoshiさんのデータを検索してみます。 このように自動で作成されたidと作成したドキュメントが結果として返ってきました。 まとめ このように簡単にmongodbへ接続してmongoshを使用してデータを操作することができました。 次回はnode.jsからmongodbに接続する方法を紹介していきたいと思います。 お疲れ様でした。

FedoraにPostgreSQL 11をインストールする方法

FedoraにPostgreSQLをインストールする

今日はFedoraにPostgreSQLのデータベースをインストールする方法を紹介します。FedoraはLinuxのディストロの中でも安定性とソフトウェアが最新にそろっていることで知られています。Debian(Ubuntu)を使わない場合で、さらにキレイなデスクトップを使いたい方は是非Fedoraがお勧めです。またPostgreSQLはオープンソースで実際のプロダクションでも使用できるリレーショナルデータベースです。ぜひ活用してください。 Fedoraのバージョンの確認 では早速、Fedoraのバージョンを確認しましょう。 システムのアップデート Postgresをインストールする前にシステムが最新のものになっているかを確認しましょう。 最後に再起動を忘れずに。 PostgreSQL Yum Repositoryを追加 PostgresのリポジトリをFedoraのシステムに追加します。 このコマンドを実行するとインストールをするか再度きかれるのでyを入力してエンターを押します。 PostgreSQL Server and Client packagesを追加 次にPostgreSQLのサーバーとクライアントパッケージを追加します。 これも本当にインストールしてよいか聞かれるのですべてにyで答えて進めます。 データベースのイニシャライズと自動スタート では、データベースをイニシャライズし、OSの起動と同時にデータベースのサーバーも起動するように設定します。 ここまでできたら、postgreSQLが間違いなく起動しているか確かめてみましょう。 問題ないですね。 PostgreSQLのコンフィグファイル PostgreSQLのコンフィグファイルは下記のファイルパスにあります。 /var/lib/pgsql/11/data/postgresql.conf ファイヤーウォールの設定 もしローカルホストではなくネットワークからPostgreSQLにアクセスをさせる場合はファイアウォールで許可させます。 PostgreSQLへのリモートアクセスを許可 /var/lib/pgsql/11/data/postgresql.confのコンフィグファイルを編集してすべてのIPからのアクセスを許可できます。 PostgreSQLにリモートアクセスを許可させます。 PostgreSQLのサービスをリスタートさせてコンフィグファイルを再読み込みさせます。 PostgreSQLアドミンユーザーのパスワード PostgreSQLにアドミン権限を与えます。 ではユーザーとデータベースを作成します。 もしcreatedb: could not connect to database template1: FATAL: Peer authentication failed for user “ユーザー名”のエラーが出た場合はpg_hba.confのコンフィグファイルでパスワードでデータベースを作成できるようにします。 では作成したデータベースを見てみましょう。 ここでデータベースの所有者やDB名が確認できます。 では今日はここまでです。 お疲れ様でした。

Djangoのデータベースを正しくバックアップ、リストアする

Djangoのデータベースをバックアップ

Djangoのアプリをデプロイするのは良いですが、大切なデータは守りたいですよね。

今日はPythonのウェブフレームワーク、Djangoで作成したアプリケーションのデータベース(PostgreSQL)のデータベースをバックアップする方法を紹介します。

データベースのバックアップ

通常データベースのバックアップには下記の様な方法があります。

  • pg_dumpのコマンドを使ってダンプファイルを抽出する。
  • Djangoについてくるsqlclear/sqlallのコマンドを使う。
  • Djangoについてくるdumpdata/loaddataのコマンドをつかう。

正しくDjangoのデータのバックアップを取る

上記のやり方には不備があります。

これらの方法だと、メディアファイル、つまり、FileFiledを使ってアップロードされたデータはバックアップに含まれません。

更に、Python manage.py migrateのコマンドで作成されるテーブル、つまりはパーミッション、セッションはバックアップに含まれません。

ですので、今日紹介するライブラリを使って簡単に正しいバックアップを取るようにしましょう。

django-dbbackupをインストールする

では、django-dbbackupのライブラリをインストールします。

下記にリンクを付けるので参考にしてください。

https://pypi.org/project/django-dbbackup/

pip install django-dbbackup

#おまけです。
pip freeze > requirements.txt

次にプロジェクトのsettings.pyファイルに下記の様にインストールしたアプリを追加します。

INSTALLED_APPS = (
    ...
    'dbbackup',  # django-dbbackup
)

DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
DBBACKUP_STORAGE_OPTIONS = {'location': '/my/backup/dir/'}

バックアップを置く場所は下記の様に指定してもOKです。

DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
DBBACKUP_STORAGE_OPTIONS = {'location': BASE_DIR/'dump'}

dumpフォルダーを作成しました。ここにbackupを置くようにします。

バックアップをとる

ではこれでOK。下記のコマンドでバックアップが取れるか試してみましょう。

python manage.py dbbackup

バックアップファイルができました!

バックアップからデータをリストア

では、試しにデータを変えてみます。レコードを一つ追加してみました。

では、コマンドラインからバックアップを使ってデータをリストアしてみましょう。

このコマンドで一番新しいバックアップのファイルを使ってデータベースを上書きします。

python manage.py dbrestore

お見事!

データがバックアップの値に戻りました。

お疲れ様です。

Pythonでpsycopg2を使ってみる

Python Psycopg2 使い方

今日はPythonを使ってローカルのPostgreSQLのデータベースとつなげてみます。 今日の環境 psycopg2のインストール ではpipを使って、psycopg2をインストールしていきます。これは、PostgreSQLのデータベースのアダプターになります。 OKですね。 DBに接続する ではPgAdmin4、もしくはコマンドラインからデータベースと接続したテーブルがあることを確認しましょう。 接続したらちゃんと接続を閉じるのでそこまで書きます。 DBに接続できなかった時にエラーを出す方法 ダミーのデータを入れる 次にPythonでテーブルのデータを表示させる前にデータを入れておきます。 PostgreSQLのデータベースのデータを表示 では下記のコードで実際のデータベースのlistingテーブルのデータを表示させます。 では、コマンドプロンプトで試すとデータが表示されました! psycopg2でレコードを追加する では、PyhtonからPostgreSQLのデータベースにデータ(レコード)を追加しましょう。 下記のコードを追加しましょう。 レコードが追加されました! CSVファイルからデータベースに書き込む ではCSVファイルを使って、Postgresのターブルにデータをコピーさせます。 該当するカラムにデータを流し込む 先ほどのやり方だと、データベースのテーブルのカラムとCSVファイルのヘッダーの数が一致しないとシンタックスエラーとかになります。 これで解決します。 とりあえず、今日はこれくらいで! お疲れ様です。

PostgreSQLでクエリを書こう②

クエリの書き方

前回はクエリでCRUD(Create,Read,Update,Delete)を行いました。今日はその続きです。 リレーショナルなデータとは データ同士でつながっているものがありますね。例えば、レストランなら、会社の情報、メニューの情報、お客さんの情報は、それぞれ別のデータベースのテーブルに格納されますが、そのうちのカラムは他のテーブルに依存することになります。 下記に、その関係となる3つのタイプを紹介します。 Foreign key (外部キー)を作る では、FOREIGN KEYのあるテーブルを作ってみましょう。 CONSTRAINTはデータベースにこのカラムが特別であることを教えてあげます。慣習的に外部キーを使う場合はfk_で名称を付けてあげます。 FOREIGN KEYが先ほど説明した外部キーのことです。user_idが外部キーになることを教えてあげます。 REFERENCEはどのテーブルのどのカラムが対象になるか指定してあげています。 テーブルができました。 データを追加する データ外部キーの部分をuserテーブルidの1としてサンプルのデータを追加してみます。 データが入りました。 しかし、このままだとユーザー1が誰か分かりませんね。 JOINのコマンドでデータを結合して表示させてみます。 これで外部キーが結合されたデータが表示されました。

PostgreSQLでCRUDのクエリを書こう①

クエリの書き方

お疲れ様です。今日はPostgreSQLについて紹介します。PostgreSQLは1996年に市場に出てから多くの参考書や動画で色々説明しているので詳しい説明は省きます。 知っておくべきことを順番にまとめたので分からないところは自分で調べてください。 PostgreSQLがインストールされているところまで進めてもらえると分かりやすいです。 PostgreSQLってなに? リレーショナルデータベースのことです。 SQLのクエリを使ってデータベースを操作することができます。 テーブルって何? MSのエクセルやスプレッドシートをイメージしてください。 テーブルはカラム(行)とロウ(段)でできています。そこにデータが保管されます。 PgAdmin4 PgAdmin4はPostgreSQLが提供するUIツールです。ここでデータベースの操作を画面を使って操作できます。PostgreSQLのインストールの際に一緒にインストールしたかと思います。 スキーマ(Schema)って何? テーブルをまとめているものです。 なぜSQLを書く必要があるの もし、UIパネルから同じことができるならなぜSQLを書く必要があるのでしょうか? それは、PythonなどでPosgreSQLに指示をする際にコードで書いてあげないといけないからです。 これらを自動化するためにはやはりクエリを覚えておかないといけないのですね。 SQLを書く では、PgAdmin4からQueryToolを開きましょう。 ;(セミコン)を忘れない ;(セミコロン)はクエリの最後に必ずつけます。これでクエリが終わりであることを宣言してあげます。 これがないとエラーが出るので忘れないように。 テーブルを作る では、クエリツールを開いたら下記のようにクエリを書いていきます。プロフィールのテーブルを例とします。 SQLの世界では、CREATE TABLEやPRIMARY KEYなどのキーワードは大文字で書きます。(大文字でなくても実行できますが) テーブルに関係するもの、自分で命名したもの(カラム名など)は小文字で書きます。 この場合、id、name、email、password、ageはカラム名になります。その右にあるのがデータタイプです。 VARCHARはストリング(文字、テキスト)のデータタイプになります。(255)は最大で255文字まで入力できるという事になります。 INTは数字のデータになります。 指定した以外のデータはそれぞれのカラムに入力できないようになっています。 SERIALはデータが作成されるとデータベース側で自動で数字が+1されます。 PRIMARY KEYはユニークなデータで他のデータと被らないものになります。 クエリを実行する では、クエリツールの再生ボタンを押して、書いたクエリを実行します。 ※テーブルを作成するデータベースが選択されていることを確認してね。 サクセス(成功)の返事が返ってきました。ありがとう。 作成したテーブルを見る では、スキーマの下にTable(テーブル)があるのでそれをクリックして先ほど作成したProfileテーブルを右クリックしてViewを押し、表示させます。 データが空のテーブルが表示されました! テーブル名は慣習的にsの付かない単数形で記載することが多いです。なのでprofilesではなくprofileになります。(どっちでもいいんだけどね) ユーザーテーブルを作成する では、先ほどのProfileテーブルを削除します。単純にテーブルのアイコンを右クリックしてDelete/Dropを押すだけです。データがある場合はそれも全部消えてしまいます。 次にユーザーテーブルを同じクエリで作成してみます。 ここで気が付いてほしいのが”user”とダブルクオーテーションで囲っていることです。userやtableはpostgresのキーワードなので、このようにキーワードをストリングにしてあげないといけないのですね。 ちなみにシングルクォーテーションではエラーが出ます。 データを追加する では下記のようにデータを追加するクエリを書きます。 VALUESの後に、指定した順に、データを教えてあげます。ストリングのデータはシングルクオートで囲ってあげます。ここはダブルクォーテーションだとエラーが出ます。 で、実行してあげると同じようにテーブルにデータが追加されました。 IDも自動で追加されましたね。 データを表示させる では追加したデータを表示させる(選択する)クエリを書きます。 … Read more