2024年7月5日金曜日

Pythonでデータベースに情報を格納する

 今回はPythonからデータベースにアクセスし情報を格納していく部分を実施していきます。これができると得られた情報をDBに格納したり、取り出したりとデータの処理がしやすくなります。今回はAWS RDSを使っていきます。今回の内容を実施するにあたり、予備知識として参考になるのが以下になります。

[データベース参考]

・データベースの正規化(エクセルでの処理)(https://smizunolab.blogspot.com/2024/06/blog-post_18.html)

・AWS RDSでデータベースを作成しCloudShellから接続してSQL文からデータを格納する(https://smizunolab.blogspot.com/2024/06/aws-rdscloudshellsql.html)

・データベースへcsvでデータをインポートする(https://smizunolab.blogspot.com/2024/06/csv.html)

[API参考]

・API (Application Programming Interface)の利用:POSTMANの利用(https://smizunolab.blogspot.com/2024/06/api-application-programming.html)

1. AWS RDSの準備

RDSを立ち上げて準備をしておきます。Public Accessが可能な状態にしてください。以下の内容と同じDBを立ち上げておきます。

・AWS RDSでデータベースを作成しCloudShellから接続してSQL文からデータを格納する(https://smizunolab.blogspot.com/2024/06/aws-rdscloudshellsql.html)

2. APIで情報を取得

今回はAPIで情報を取得してそれをDBに格納していきます。APIが初めてな人は下記を参照してください。

・API (Application Programming Interface)の利用:POSTMANの利用(https://smizunolab.blogspot.com/2024/06/api-application-programming.html)

今回は、NASA API:https://api.nasa.gov/ を利用します。各自でアカウント登録をして、APIキーを取得してください(アカウント登録をするとAPIキーが送られてきます)。

このAPIを使って、Pythonで動かしてみます。APIの使用はAPI提供元のサイトを参照してください。APIキーは自分のものを入れてください。
import requests
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxxxxx"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
view raw gistfile1.txt hosted with ❤ by GitHub

得られた情報を整理します。以下のソースコードは日付も指定しています。
import requests
import json
from IPython.display import Image, display
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxx&date=2021-09-01"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
data = response.json()
# 各キーごとに内容を表示
print("日付:", data["date"])
print("説明:", data["explanation"])
print("HD画像URL:", data["hdurl"])
print("メディアタイプ:", data["media_type"])
print("サービスバージョン:", data["service_version"])
print("タイトル:", data["title"])
print("画像URL:", data["url"])
# 画像URLの取得
image_url = data["url"]
# 画像の表示
display(Image(url=image_url))
view raw gistfile1.txt hosted with ❤ by GitHub
3. データベースの準備
情報をデータベースに格納できるように準備します
(データベース名 : nasa、テーブル : apod)
CREATE DATABASE IF NOT EXISTS nasa;
USE nasa;
CREATE TABLE IF NOT EXISTS apod (
id INT AUTO_INCREMENT PRIMARY KEY,
date DATE NOT NULL,
explanation TEXT,
hdurl VARCHAR(255),
media_type VARCHAR(50),
service_version VARCHAR(50),
title VARCHAR(255),
url VARCHAR(255)
);
view raw gistfile1.txt hosted with ❤ by GitHub
今回のテーブル内容を、APIで得られる値から設定しています。

4. PythonからDBへ情報の格納
Pythonからデータベースに情報を格納していきます。
MySQL Connectorのインストール:pip install mysql-connector-python
Pythonからデータベースに情報を格納します。
import mysql.connector
import requests
# NASA APIからデータを取得
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxxxx&date=2021-09-01"
response = requests.get(url)
data = response.json()
# MySQLデータベースへの接続
conn = mysql.connector.connect(
host="database-001.xxxxxxxxxxxxx.us-east-1.rds.amazonaws.com",
user="admin",
passwd="LinuxOS99",
database="nasa"
)
# カーソルの作成
cursor = conn.cursor()
# SQL文の定義
sql = """
INSERT INTO apod (date, explanation, hdurl, media_type, service_version, title, url)
VALUES (%s, %s, %s, %s, %s, %s, %s)
"""
# データの挿入
values = (
data["date"],
data["explanation"],
data["hdurl"],
data["media_type"],
data["service_version"],
data["title"],
data["url"]
)
# SQL文の実行
cursor.execute(sql, values)
# コミット(変更をデータベースに反映)
conn.commit()
# 接続のクローズ
cursor.close()
conn.close()
view raw gistfile1.txt hosted with ❤ by GitHub
プログラムを実行したらselect文で情報を確認します。
これでPythonから情報をDBに格納ができました。

0 件のコメント:

コメントを投稿