皆さんこんにちは!SEふじたけです。
今回はyfinanceで取得した株価をPostgreSQLに登録していきます。
![[AI]BOTさん](https://awsgcp.go-cloudpro.com/wp-content/uploads/2020/12/6e9811b92a277141a27037d6ef857498.png)
ついに株価をデータベースに登録するんだね!
今まではAPIの解説だけでしたが、取得した株価をPostgreSQLに保存していきます!
pipでPostgreSQL操作用のライブラリをインストール
pythonでPostgreSQLを操作する為には、psycopg2というライブラリをインストールする必要があります。
psycopg2はpipでインストールする事が可能です。
pip install psycopg2
これで準備が整いました。非常に簡単ですね!
psycopg2の詳細は以下サイトから確認できます。

PythonでPostgreSQLに接続する
まずはPostgreSQLに接続しないといけません。
Pythonで接続するには以下のコードで簡単に接続できます。
import psycopg2
connect = psycopg2.connect(host="localhost", database="dbnm", user="postgres", password="postgres")
PythonでPostgresに登録する
今回DBをテスト的に登録する為に以下のようにテーブルを作成しました。
CREATE TABLE public.d_stockstrage (
stock_code varchar(4) NOT NULL,
stock_date timestamp NULL,
start_val numeric(10, 2) NULL,
end_val numeric(10, 2) NULL,
high_val numeric(10, 2) NULL,
low_val numeric(10, 2) NULL,
volume numeric(12) NULL,
);
作成したテーブルに追加するコードは以下の通りです。
#Databaseに登録する
insquery = "insert into d_stockstrage (stock_code, stock_name, stock_date, start_val, end_val, high_val, low_val) values %s"
params = []
params.append(['6758', 'ソニー', 'A', dt, open, close, high, low])
execute_values(cur, insquery, params)
connect.commit()
connect.close()
登録する各値は後で入れていきます。
insert文で登録対象の内容を選択したあと、「value」後に値の形式を指定します。
今回は全て文字列で指定できるため、全て「%s」で指定します。
登録する型が全て同一であれば1つ記入すれば良いので上のコードになります。
psycopg2 ではパラメータ配列を一括でinsertする事ができます。
パラメータ配列を追加する為には、appendを用いて追加していきます。
Pythonにyfinanceのデータを登録する
前記事ではyfinanceからデータを取得しました。
前記事と本記事の内容を活用してyfinanceの内容をPostgresに登録します。
from datetime import datetime
from psycopg2.extras import execute_values
import yfinance as yfin
import pandas as pd
import psycopg2
connect = psycopg2.connect(host="localhost", database="StockDB", user="postgres", password="postgres")
dframe = yfin.download("6758.T", period="2y")
print(dframe)
#Databaseに登録する
insquery = "insert into d_stockstrage (stock_code, stock_name, stock_date, start_val, end_val, high_val, low_val) values %s"
params = []
for idx, row in dframe.iterrows():
cur = connect.cursor()
print(row.name)
#dtstr = row.name.str
try:
valstr = ""
open = round(row['Open'], 2)
close = round(row['Close'], 2)
high = round(row['High'], 2)
low = round(row['Low'], 2)
dt = row.name.strftime('%Y/%m/%d')
params.append(['6758', 'ソニー', dt, open, close, high, low])
except psycopg2.Error as ex:
ex.pgerror
try:
execute_values(cur, insquery, params)
cur.close()
except psycopg2.Error as ex:
ex.pgerror
connect.commit()
connect.close()
上記のコードではソニー(6758.T)二年分の株価をPostgresに登録しております。
yfinanceで株価を取得した際に、小数点以下の桁数が多かったので四捨五入して2桁で表示しております。
最後に
今回はyfinanceで取得した株価をPostgresに登録する事について記事にしました。
ここまでくれば株価の取得は出来るようになったと言えます。
あとは予測するだけです!
![[AI]BOTさん](https://awsgcp.go-cloudpro.com/wp-content/uploads/2020/12/6e9811b92a277141a27037d6ef857498.png)
予測が一番難しいんだけど。。。
株価の解析や予測方法はひとまず置いといて、取得はできた事からPythonと株も身近になってきました。
次はストップ高やストップ安の取得方法や、yfinanceの1回で取得できる限度数を記事にできればと思っています。
最後まで読んで頂きありがとうございました。
コメント