iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

前言

這是需要調整資料庫連線資訊,修改成符合MySQL的格式。
本次也會參考《【Day10】Azure資料庫#2:建立SQL server資料表》以及《【Day16】每日資料匯入資料庫》這兩篇文章。

至於Python的使用,可以參考前面系列,這邊就不再多說如何用pipenv和安裝套件。

程式碼在:d4_saveStockTransToDb.py


新增股票代碼

《【Day10】Azure資料庫#2:建立SQL server資料表》,是先手動輸入台積電資料進入資料庫,這邊我們也先跟著做。畢竟先把Azure的依賴改成MySQL,之後再介紹取得上市公司的基本資料。所以就手動輸入台積電資料囉~

所以結果如下:

https://ithelp.ithome.com.tw/upload/images/20210905/20103826lcylnmb3fr.png

新增交易資訊

使用《【Day16】每日資料匯入資料庫》的方法,匯入資料,其中需要把連結改掉。

所以要刪除save_data_to_azure_db(stock_data)這個function,改建立save_data_to_mysql_db()

def save_data_to_mysql_db():
    db_settings = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "pwd",
        "db": "finance",
    }
    # 計數器:計算新增了幾筆
    counter = 0

    try:
        # 建立connection物件
        conn = pymysql.connect(**db_settings)
        # 建立cursor物件
        with conn.cursor() as cursor:
            now = datetime.datetime.now().strftime("%Y-%m-%d")

            # 新增SQL語法
            for _, row in df.iterrows():
                try:
                    cmd = """INSERT INTO DailyPrice 
                    (StockID, Symbol, TradeDate, OpenPrice, HighPrice, LowPrice,
                    ClosePrice,Volumn)
                    values(%s,%s,%s,%s,%s,%s,%s,%s);"""
                    cursor.execute(
                        cmd,
                        (
                            None,
                            row.stock_symbol,
                            now,
                            row.open if pandas.notnull(row.open) else 0,
                            row.high if pandas.notnull(row.high) == float("nan") else 0,
                            row.low if pandas.notnull(row.low) == float("nan") else 0,
                            row.close if pandas.notnull(row.close) == float("nan") else 0,
                            row.volume if pandas.notnull(row.volume) == float("nan") else 0,
                        ),
                    )
                    conn.commit()
                    counter += 1
                except Exception as e:
                    print(e)
    except Exception as exc:
        print(exc)
        return False

    return True

其中row.open if pandas.notnull(row.open) else 0是用來判斷該資料是否為None,如果為空值,就給0


後記

接下來開始我們真正的新內容囉


上一篇
【D3】建立MySQL資料庫
下一篇
【D5】期貨資訊:期交所&Open data
系列文
金融分析 X Python-訊號燈32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
obarisk
iT邦研究生 2 級 ‧ 2021-09-05 10:47:46

try pandas to_sql

這個也是不錯的方法!
pandas真的有很多好用的功能
參考:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html

我要留言

立即登入留言