ゼロからPythonで株式量子化取引を実現するシロノート(3)
この記事では、インタフェースから取得したdataframe構造のデータをmysqlに保存する方法について説明します.
インストールmysqlはbrewを使用しています.これは前にインストールされています.詳しくは言わないで、ネット上でインストールのチュートリアルを探すことができます.
バージョンのインストールを指定することをお勧めします.最新のmysqlはまだサポートされていないので、面倒です.
私のmysqlバージョンは5.7です.参考にしてください.
次にsqlalchemyをインストールします.
>> pip install sqlalchemy
このインストール時間は少し長いので、できるだけ中断しないでください.失敗したら再試行することができます.
データベースにデータを保存し、to_を使用します.sql関数.
一般的なパラメータは次のとおりです.
nameテーブル名
connデータベースリンク
if_existsテーブルにどの論理があるか、{'fail','append','place'}、デフォルトはfailです(データが存在するのではなく、テーブルが存在することに注意してください).
flavorデータベースタイプcreate_を使用する場合engineは記入しないでください
chunksizeは何回に分けてデータベースに格納されますか.デフォルトはNoneです.つまり、一度に格納されます.
データベースにstockという名前のdatabaseを作成しました
create database stock;
次にsqlalchemyを使用してデータベース接続を作成します.
実行、実行成功.
データベースをチェックしたらstock_basicテーブルは作成され、データは挿入され、3571があります.
表の設計を見てみると、すべてのフィールドタイプがtextであることがわかります.これはスペースがもったいないので、修正しました.修正した表sqlは以下の通りです.
CREATE TABLE `stock_basic` (
`index` int(11) DEFAULT NULL,
`ts_code` varchar(12) DEFAULT NULL,
`symbol` varchar(10) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL,
`area` varchar(10) DEFAULT NULL,
`industry` varchar(50) DEFAULT NULL,
`market` varchar(10) DEFAULT NULL,
`exchange` varchar(10) DEFAULT NULL,
`curr_type` varchar(10) DEFAULT NULL,
`list_status` varchar(5) DEFAULT NULL,
`list_date` varchar(10) DEFAULT NULL,
`delist_date` varchar(20) DEFAULT NULL,
`is_hs` varchar(5) DEFAULT NULL,
KEY `ix_stock_basic_index` (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
このテーブルのデータは1万以内で、他のフィールドにインデックスを付けることは考慮されません.
これらのデータが変化する場合があることを考慮して、起動するたびに、表のデータを消去し、再インポートします.
修正コードは次のとおりです.
テストを再実行し、正常です.
これにより、株式リストを取得し、リストを巡り、他のインタフェースを呼び出し、より多くのデータを取得します.
このノートはここまでです.
インストールmysqlはbrewを使用しています.これは前にインストールされています.詳しくは言わないで、ネット上でインストールのチュートリアルを探すことができます.
バージョンのインストールを指定することをお勧めします.最新のmysqlはまだサポートされていないので、面倒です.
私のmysqlバージョンは5.7です.参考にしてください.
次にsqlalchemyをインストールします.
>> pip install sqlalchemy
このインストール時間は少し長いので、できるだけ中断しないでください.失敗したら再試行することができます.
データベースにデータを保存し、to_を使用します.sql関数.
一般的なパラメータは次のとおりです.
nameテーブル名
connデータベースリンク
if_existsテーブルにどの論理があるか、{'fail','append','place'}、デフォルトはfailです(データが存在するのではなく、テーブルが存在することに注意してください).
flavorデータベースタイプcreate_を使用する場合engineは記入しないでください
chunksizeは何回に分けてデータベースに格納されますか.デフォルトはNoneです.つまり、一度に格納されます.
データベースにstockという名前のdatabaseを作成しました
create database stock;
次にsqlalchemyを使用してデータベース接続を作成します.
from sqlalchemy import create_engine
engine = create_engine('mysql://user:[email protected]/stock?charset=utf8')
data.to_sql('stock_basic', engine) # to_sql
実行、実行成功.
データベースをチェックしたらstock_basicテーブルは作成され、データは挿入され、3571があります.
表の設計を見てみると、すべてのフィールドタイプがtextであることがわかります.これはスペースがもったいないので、修正しました.修正した表sqlは以下の通りです.
CREATE TABLE `stock_basic` (
`index` int(11) DEFAULT NULL,
`ts_code` varchar(12) DEFAULT NULL,
`symbol` varchar(10) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL,
`area` varchar(10) DEFAULT NULL,
`industry` varchar(50) DEFAULT NULL,
`market` varchar(10) DEFAULT NULL,
`exchange` varchar(10) DEFAULT NULL,
`curr_type` varchar(10) DEFAULT NULL,
`list_status` varchar(5) DEFAULT NULL,
`list_date` varchar(10) DEFAULT NULL,
`delist_date` varchar(20) DEFAULT NULL,
`is_hs` varchar(5) DEFAULT NULL,
KEY `ix_stock_basic_index` (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
このテーブルのデータは1万以内で、他のフィールドにインデックスを付けることは考慮されません.
これらのデータが変化する場合があることを考慮して、起動するたびに、表のデータを消去し、再インポートします.
修正コードは次のとおりです.
#coding=utf-8
import tushare
from common import db
from sqlalchemy import create_engine
tushare.set_token('your token')
pro = tushare.pro_api()
data = ''
try:
data = pro.stock_basic(fields='ts_code,symbol,name,area,industry,list_date,market,is_hs,list_status,exchange,delist_date,curr_type')
except Exception, e: #py 2.7 , py 3 Exception as e
print e
exit(0)
stock_conn = db.db.get_stock_conn() # conn
stock_cursor = stock_conn.cursor() #
stock_cursor.execute('truncate table stock_basic') #
stock_conn.commit() #
engine = create_engine('mysql://user:pwd@host/database?charset=utf8') # engine
data.to_sql('stock_basic', engine, if_exists='append') # to_sql,
テストを再実行し、正常です.
これにより、株式リストを取得し、リストを巡り、他のインタフェースを呼び出し、より多くのデータを取得します.
このノートはここまでです.