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ファイルのヘッダーの数が一致しないとシンタックスエラーとかになります。 これで解決します。 とりあえず、今日はこれくらいで! お疲れ様です。

Pythonでアメリカのパワーボールを当てる

Pythonで宝くじの予想

どうも、こんにちは。今日はアメリカで今、熱いパワーボールの宝くじとPythonを使ってなんかやってみます。 宝くじは自己責任で行いましょう。 パワーボールとは 日本のロト6と同じようなものです。 最初に数字の5つを選び、次にパワーボールの数字を選びます。 この6桁の数字が予想できればジャックポッドがもらえるわけです。 最初の5つの数字は1から69です。 パワーボール(ラッキーナンバー)は1から26までの数字を選びます。 抽選は毎週、月曜日、水曜日、土曜日になります。 今はジャックポットを当てた人がしばらくいないのでどんどん積み重なって1.9ビリオンダラーになってます。(2022年11月7日時点) 日本円にすると277,946,250,000円になります。2779億円です。。。。 すごいですね。 まずは確率論を学ぶ ちょっと前に本で読みましたが、なぜ、すべての並び方に同じ当たる確率が均等にあるはずなのに、1・2・3・4・5・6とか5・10・15・20・25・30という予想をする人がいないのか。もしくはそのようなあたりがないのかという理由に説明していました。 その結果、Powerballは3つの奇数と2つの偶数の組み合わせと小さい数と大きい組み合わせの数が良いことを知りました。 過去のデータを手に入れる テキサス州の宝くじサイトで過去のパワーボールのデータがCSVで手に入りました。 https://www.texaslottery.com/export/sites/lottery/Games/Powerball/Winning_Numbers/ とりあえず、2010年からのすべてのデータを手に入れました。 Pythonですること では、下記の順番でデータを分析していきます。 この方法で、当たる確率の高い数字が表示できるようになりました。 ではサンプルコードをどうぞ。 では、Pythonを実行すると、確率の高い数字が出てきました。 ここから先ほどの論理を合わせて数を選べば当たる確率も増えるのでは? お疲れ様です。

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

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

PostgreSQLをインストールしよう

今日はPostgreSQLのデータベースをWindowsにインストールする手順を説明します。 では下記のサイトからインストーラーをダウンロードします。 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 特に指定がない場合は最新版のバージョン15をダウンロードしましょう。 ダウンロードできたら、.exeの実行ファイルをクリックしてインストールを始めます。 Nextを押します。 ファイルの保管場所を教えてあげます。通常はこのままでOKです。 Stack Builderは使わないかもしれないのでチェックをはじしてもOkです。 後は使うと思うのでそのままにしてNextを押します。 データを保管するディレクトリです。これもこのままNextです。 postgresユーザーのパスワードを設定します。 後からつかうので忘れないものに! 次にポートの設定です。 外からアクセスする場合にポート番号を指定してあげます。(データベースがアパートのビルなら、ポートはそのドア番号みたいなものです。) Localです。 これはデフォルトのままでOKです。 で、Next。 インストールを開始だっ。 インストールが始まります。。。 あとちょっとだね。 インストールが完了しました。 最後のチェックボックスは外してFinishして大丈夫です。 とくに追加でインストールしたツールとかはないので。 おまけ もし、コマンドラインからPSQLを実行したい場合は環境変数にPostgresのパスを登録してあげる必要があります。 それは調べてやってみてください。

Pythonでウェブスクレイピング – BeautifulSoup ②

Beautiful Soup使い方

では前回練習したウェブスクレイピングの続きを説明します。 前回の記事はこちらからどうぞ。 今日はヤフオクに表示されている入札価格と商品名などをスクレイピングしていきたいと思います。 requestsのライブラリをインストール ではPythonから実際のウェブサイトにアクセスするにあたりHTTPリクエストを送ることになります。その際にRequestsのライブラリを使うのでインストールしましょう。 前回、virtualenvで環境を作った人はアクティベートすることを忘れずに! ではページのHTMLをスクレイピングします。 ウェブページの内容が出てきました。 リスティングのHTMLを見る ではデベロッパーツールで各リストを囲っているカードのエレメントをみます。 見てわかるようにliエレメントでProductというクラスがありますね。 ではこのProductクラスをすべてスクレイピングします。 Pythonファイルを実行してちゃんとスクレイピングできているか確かめましょう。 次に一つのリスティングから必要な情報を吸い取ります。 ではこのリスティングをループさせます。 10分ごとにスクレイピングを実行させる では先ほどのコードをファンクションにして10分ごとに実行させるように設定します。 データをSCVに書き出す 日本語のエンコードは私は”utf_8_sig”で行いました。(アメリカのPCなので。。。 色々試してください。

Pythonでウェブスクレイピング – Beautiful Soup ①

PythonでBeautiful Soupを使ってみよう

今日はPython初心者の方でもわかるウェブスクレイピングについて説明します。 ウェブスクレイピングとはウェブサイトにある情報をスクレイプ(剥ぎ取る)という事です。 例でいうと、過去の天気予報の情報をサイトからスクレイピングしたり、Amazonのサイトの商品の情報をスクレイピングしたりできます。 そのデータをどうするかはあなた次第ですが、このPythonの得意分野である自動化という力を発揮できる素晴らしいプロジェクトになります。 下準備 Beautiful Soupとは Beautiful Soup(美しいスープ)はPythonのライブラリです。このライブラリを使ってウェフスクレイピングを行います。他にもウェブスクレイピングができるライブラリがありますが、一番お勧めがこのBeautiful Soupになります。 HTMLの基本を知っておく ウェブサイトのスクレイピングをするにあたり、HTMLの構造を知らないとどの情報をスクレイピングしたいのか指示ができません。 まずは簡単なサイトでスクレイピングの練習をしましょう。 簡単なHTMLで練習 ローカルの環境にテスト用でHTMLを作成してスクレイピングの練習をします。 不要な人は飛ばしてください。 ではPythonとBeautifulSoupをセットアップしていきましょう。 環境のセットアップ Pythonのライブラリをインストールする際にpip(パッケージマネージャー)を使用します。 このままパッケージをインストールしてしまうと、グローバルにパッケージがインストールされてしまいます。 個人で楽しむ分には問題ありませんが、今後、多数のプロジェクトを並行して作業するにあたり、仮想環境を準備するのが最適になります。 本題とはそれますが、それを学びたい方は下記の動画を見てください。 virtualenvのインストール 仮想環境を使いたい人はこちらのコマンドでインストールします。 インストールができたら仮想環境を作成します。 仮想環境をアクティベートします。 これでコマンドプロンプトの左側に環境名が表示されればOKです。 ここからPythonでインストールしたライブラリはenv内に格納されるのでアクティベートされたときのみPythonがアクセスできます。 BS4のインストール BeautifulSoup4を略してbs4と言います。 何事もインストールする前にはちょっとだけでも公式ドキュメンテーションを見ておくものです。 https://www.crummy.com/software/BeautifulSoup/bs4/doc/ ではこれをインストールしていきましょう。 インストールされました! lxmlのインストール BS4で作業するにあたり、HTMLのパーサー(読み込む役割)をするライブラリが必要になります。 LxmlはHTMLのパーサーのライブラリの一つで、お勧めなのでインストールしていきます。 コードを書く ではやっと下準備が整ったのでコードを書いていきましょう。 私は、テキストエディタはVSCodeを使います。皆さんが使っているものをどうぞ。 では下記のようにコードを書いていきます。 同じディレクトリにindex.htmlで下記の中身のファイルを作成します。 ではコマンドプロンプトからPythonファイルを実行します。 見事!HtmlのファイルがPythonから読み込まれました。 しかし、このままだとHTMLタグも入って見づらいのでbeautifulSoupのPrettifyを使ってキレイにしましょう。 さっきよりキレイになりました! HTMLタグで絞り込む .find ではH1タグのHTMLだけをスクレイピングしたい場合はこのようにします。 soup.findメソッドを使い、タグを指定してあげます。 .fins_all これだと最初のh1タグしかスクレイピングされませんね。 では、すべてのh1タグをスクレイピングするようにしましょう。 findのメソッドをfind_allに変えてみましょう。 すべてのh1タグがスクレイピングされました! … Read more

ViteでReactを始めよう!

Viteでreactを始めよう

皆さん、こんにちは。

今日はViteというコマンドツールでReactのアプリをセットアップしていきます。

今日の条件

Node.js バージョン16 (コマンド node -v)

npm バージョン8(npm -v)

今までのやり方

通常のReactのセットアップは下記のコマンドです。

npx create-react-app my-app

これで自動的にBabelとWebPackがインストールされたreactのプロジェクトが作成されます。

これらのパッケージが古いブラウザにも対応したJavaScriptファイルなどに変換してくれるのですが、その為にファイルが大きくなる+遅くなることがあります。

なので今日使うViteでサクサクの一般的なブラウザのみに対応したセットアップの仕方で設定する方法をお勧めします。

Viteとは

ViteはもともとVueJSの創設者が作成したビルドツールになります。Vueのプロジェクト以外にも対応しており、reactのデベロッパーにも人気です。

ViteでVueのプロジェクトを始めたい場合は下記の記事からどうぞ。

ViteでReactを始める(Yarn)

yarn create vite

#プロジェクト名を聞かれたら
my-vite-app

#フレームワークを聞かれたら
reactを選択

cd プロジェクトフォルダ
yarn 
yarn dev

ViteでReactを始める

ではコマンドラインに下記を叩き込みます。

ファイルパスが自分がプロジェクトを作成したいパスにいることを確認してください。

npm create vite@latest

y(いえす)でエンターを押す。そのままエンターでもOKです。

プロジェクト名を聞かれるので適当に入力します。

画像っだとmovie-appにしてみました。

では使いたいフレームワークを選択するのでここで、reactを選択してエンター

次にJavaScriptを使うのかTypeScriptを使うのか聞かれます。

今回はJavaScriptにしてエンター。

ではreactのベースとなるアプリができたのでフォルダの中に移動してパッケージをインストールして、起動してみます。

表示された通りに順番に入力しましょう。

npm installはnpm iでも同じことができます。

npm run dev

ここで開発用のアプリが起動したのでブラウザから見てみましょう。

カウントのところをクリックすると数が増えていきますね。

へえ。

お疲れ様でした。

無料で使えるAPIを紹介

無料で使えるAPI

皆さんこんにちは。

今日はフロントエンドで使えそうな、ポートフォリオのプロジェクトで使えそうな無料のAPIを紹介します。

真面目なものから、ふざけたものまで色々集めたので是非、使ってみてください。

NASAの宇宙API

ユーザー登録が必要です。

日替わりの宇宙画像とかがあるそうです。

https://api.nasa.gov/index.html

天気予報API

天気情報のAPIは誰しもが使うマストなAPIですね。簡単な天気アプリとかに使えそうです。

これもユーザー登録が必要になります。

https://openweathermap.org/api

米国株式のAPI

Polygon.ioというところが提供しているAPIです。GitHubで登録してAPIキーを手に入れた後にAPIにアクセスできるようです。


ユーザー登録なしで使えるAPI

ここから、ユーザー登録が不要ですぐに使えるAPIを紹介します。

ポケモンAPI

みんなの大好きなポケモンのデータがAPIになりました。

https://pokeapi.co/

参考URL: https://pokeapi.co/api/v2/pokemon/charizard

カクテルAPI

カクテルのレシピがAPIになってます。

https://www.thecocktaildb.com/api.php

サンプルURL:https://www.thecocktaildb.com/api/json/v1/1/search.php?s=margarita

ビットコインAPI

クリプトのAPIです。CoinBaseが提供しています。

https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-users#data-endpoints

サンプルURL:https://api.coinbase.com/v2/currencies

為替API

為替のレートのAPIです。

https://www.coingecko.com/en/api

サンプルURL:https://api.coingecko.com/api/v3/exchange_rates

アメリカの統計

アメリカの人口や統計がデータになったAPIです。

https://datausa.io/about/api/

サンプルURL: https://datausa.io/api/data?drilldowns=Nation&measures=Population

犬の画像

ランダムで犬の画像が表示されます。

https://dog.ceo/dog-api/

サンプルURL:https://dog.ceo/api/breeds/image/random

アニメAPI

アメリカで有名なMyAnimeListの非公式のAPIです。

https://jikan.moe/

サンプルURL: https://api.jikan.moe/v4/anime?q=naruto&sfw

本のAPI

OpenLibraryという組織で提供している本のAPIです。

https://openlibrary.org/developers/api

サンプルURL: http://openlibrary.org/api/volumes/brief/isbn/9780525440987.json

ランダムユーザーAPI

自動でユーザーを生成してくれるAPIです。

https://randomuser.me/

サンプルURL: https://randomuser.me/api/

とりあえず、これだけあれば次のプロジェクトの参考になるのではないでしょうか?

お疲れ様でした。