mysql儲存資料到資料庫表中 將資料儲存到資料庫

2021-10-19 00:17:07 字數 3022 閱讀 7742

本講中,我們來談一談回測中資料的儲存和管理。實現這一功能離不開資料庫的幫助,在這裡採用mysql資料庫向大家演示如何在資料庫中建立表、並且如何把從資料來源獲取的資料儲存到資料庫的表中。

在mysql資料庫中建立資料表

首先需要在mysql中先建立乙個資料庫test,並在該資料庫中建一張表his_daily_adj_bars來儲存各種交易品種的歷史日資料,這些日資料經過了除權的處理,因此可以在回測中直接使用。

在該表中,id是乙個自增的主鍵,code是交易品種的**作為外來鍵;bar_date是bar的日期,格式是yyyy-mm-dd;created_date是資料新增的日期,而last_updated_date則是最後修改資料的日期,其格式是yyyy-mm-dd hh:mm:ss。在mysql中的建表語句如下所示。

create table if not exists his_daily_adj_bars(

`id` int not null auto_increment,

`code` varchar(20) not null,

`bar_date` time not null,

`open_price` decimal(19,4) null,

`high_price` decimal(19,4) null,

`low_price` decimal(19,4) null,

`close_price` decimal(19,4) null,

`volume` bigint null,

`amount` bigint null,

`created_date` datetime not null,

`last_updated_date` datetime not null,

primary key (`id`),

key `index_code` (`code`)

)engine=innodb auto_increment=1 default charset=utf8;

獲取資料並將資料儲存到mysql資料庫

將獲取的資料插入到mysql資料庫中需要以下幾個步驟:從資料來源獲取資料

連線資料庫

做insert操作

獲取的資料**於tushare包,我們可以採用下面的方法來獲取某只交易品種在一段時間的bars。在獲取bars資料之後,需對資料進行處理使其與資料庫的表結構一致。def obtain_data(self, code, start_time, end_time):

bars = ts.get_h_data(code,start_time,end_time).sort_index()

bars_list = zip(bars.index,bars['open'],bars['high'],bars['close'],bars['low']

,bars['volume'],bars['amount'])

now = datetime.datetime.now().strftime('%y-%m-%d %h:%m:%s')

data = [(code,d[0],d[1],d[2],d[3],d[4],d[5],d[6],now,now) for d in bars_list]

return data

連線資料庫的方法是使用connect('ip','username','password','db_name'),如果資料庫連線失敗會列印出一條訊息提示。def __init__(self):

try:

self.db = mysql.connect("localhost","root","123456","test")

self.cursor = self.db.cursor()

except mysql.error,e:

print self.get_cur_time() + "連線資料庫錯誤,%d: %s" % (e.args[0], e.args[1])

將獲取的資料插入到資料庫最重要的是構造執行insert操作的sql語句字串。該字串中主要含三個引數,乙個是插入表的欄位名組成的cols_str,乙個是插入的表名,另乙個則是由多個%s組成format_str。為了獲取表的字段,我們需要自定義乙個獲取一張資料表所有欄位的方法。在進行插入操作的時候,還需做資料庫的事務管理,如果插入發生錯誤那麼將進行回滾操作。def insert_data(self, table, data):

try:

field_name = self.get_table_fields(table)

col_str = ','.join(field_name[1:])

format_str = ('%s, ' * (len(field_name)-1))[:-2]

sql_str = "insert into %s (%s) values (%s)"% (table, col_str, format_str)

try:

self.cursor.executemany(sql_str, data)

self.db.commit()

except mysql.error,e:

self.db.rollback() ## 回滾

print self.get_cur_time() + "插入資料庫錯誤,%d: %s" % (e.args[0], e.args[1)

except mysql.error,e:

print self.get_cur_time() + "資料庫錯誤,%d: %s" % (e.args[0], e.args[1])

完成了以上幾步後,即可選取測試資料進行測試。if __name__ == '__main__':

test = importmysql()

data = test.obtain_data('002337','2012-01-01','2012-02-01')

test.insert_data('his_daily_adj_bars',data)

在mysql中進行query,可以發現相應的**資料已經儲存在了資料庫當中。最後需要補充的是,pandas也提供了to_sql的方法實現將pandas資料結構的資料匯入資料庫的功能,大家可以查閱文件學習。

是時候關注一波了!

mysql資料庫,資料遷移a表到b表

開發新專案但是用到了舊專案的資料,欄位名也發生了變化,怎麼樣把老資料匯入新錶?mysql資料庫,資料遷移a表到b表可以通過以下sql實現,通過select b表的字段,用於對應a表的字段,進行填充,這樣可以實現 insert into bdatas tj members bankinfo uid,b...

MySQL 資料庫中如何把A表的資料插入到B表

web開發中,我們經常需要將乙個表的資料插入到另外乙個表,有時還需要指定匯入字段,設定只需要匯入目標表中不存在的記錄,雖然這些都可以在程式中拆分成簡單sql來實現,但是用乙個sql的話,會節省大量 兩張表 inserttest和inserttest2,前者中有測試資料 create table in...

Access資料庫到Mysql資料庫實時更新

專案目標 首先是將access資料庫中的大量資料 已經存好的原有百萬級資料 轉存到mysql資料庫中,然後,隨著access中資料的增加,要同步更新mysql資料庫,更新週期自定。思路 一開始的轉存前篇部落格已經講過,這裡就忽略了,主要是實現access資料更新後同步到mysql中。思路是 1.用m...