這是需要調整資料庫連線資訊,修改成符合MySQL的格式。
本次也會參考《【Day10】Azure資料庫#2:建立SQL server資料表》以及《【Day16】每日資料匯入資料庫》這兩篇文章。
至於Python的使用,可以參考前面系列,這邊就不再多說如何用pipenv
和安裝套件。
在《【Day10】Azure資料庫#2:建立SQL server資料表》,是先手動輸入台積電資料進入資料庫,這邊我們也先跟著做。畢竟先把Azure的依賴改成MySQL,之後再介紹取得上市公司的基本資料。所以就手動輸入台積電資料囉~
所以結果如下:
使用《【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
。
接下來開始我們真正的新內容囉
try pandas to_sql
這個也是不錯的方法!pandas
真的有很多好用的功能
參考:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html