Python資料庫(上):別再用csv檔存資料了! [附程式碼]


近期發現,竟然還有很多人在用csv或是excel檔案存歷史數據,每次做交易研究時,再一個個讀取載入,這樣做不但速度慢,檔案分散各處也難以管理,一不小心資料就遺失了!

今天,量化操盤手寫了一篇Python資料庫速成教學,讓你從此以後擺脫資料七零八落的窘境。

既然是用Python,當然要用最精簡的方法,處理資料存取的問題,從頭開始教SQL語法,太不符合Python精神(Pythonic)!

本篇教學,一個SQL語法都沒用到,並且完美結合Pandas + SQLite,趕快來看看怎麼做!

Python資料庫(下):程式碼分段解說

透過練習以下程式碼,很快就能熟悉Python的資料庫操作:
# 載入需要用到的函式庫
import pandas as pd # 數據分析函式庫
import sqlalchemy # SQL資料庫ORM函式庫
import ffn # 金融函式庫

# 連結SQLite資料庫
engine = sqlalchemy.create_engine('sqlite:///data.db') # 資料庫檔案(.db)會生成在程式碼(.py)所在資料夾

# SQLite資料庫Table操作(建立、更新、讀取)
stock_1 = ffn.get('^TWII', column_names=['price'], start='2018-1-1', end='2018-12-31') # 下載加權指數歷史資料(2018)
stock_1.to_sql('stock', engine, if_exists='replace', index_label='table_index') # 將資料存入SQLite資料庫(建立Table: stock)
output_1 = pd.read_sql('stock', engine, index_col='table_index', parse_dates=['table_index']) # 讀取SQLite資料庫(Table: stock)

stock_2 = ffn.get('^TWII', column_names=['price'], start='2019-1-1') # 下載加權指數歷史資料(2019~Now)
stock_2.to_sql('stock', engine, if_exists='append', index_label='table_index') # 將資料存入SQLite資料庫(更新Table: stock)
output_2 = pd.read_sql('stock', engine, index_col='table_index', parse_dates=['table_index']) # 讀取SQLite資料庫(Table: stock)

nasdaq = ffn.get('^IXIC', column_names=['price'], start='2018-1-1') # 下載NASDAQ歷史資料(2018~Now)
nasdaq.to_sql('nasdaq', engine, if_exists='replace', index_label='table_index') # 將資料存入SQLite資料庫(建立Table: nasdaq)

# 取得資料庫Tables名稱
table_names_1 = engine.table_names() # 取得資料庫內全部Tables的名稱
print(table_names_1) # 顯示所有Tables的名稱

# SQLite資料庫Table操作(刪除)
meta = sqlalchemy.MetaData() # 建立MetaData物件
meta.reflect(bind=engine) # 將資料reflect到meta

table_stock = meta.tables['stock'] # 建立Table物件(Table: stock)
table_stock.drop(engine) # 刪除Table(Table: stock)

# 取得資料庫Tables名稱
table_names_2 = engine.table_names() # 取得資料庫內全部Tables的名稱
print(table_names_2) # 顯示所有Tables的名稱