アプリのデータ永続化のためにSQLite3を使う
データ解析ではndarrayで多次元配列を操作するのがほとんど.毎回呼び出していると時間がかかるのでDBに突っ込みたい.
http://www.mwsoft.jp/programming/numpy/rdb_to_pandas.html
http://www.mwsoft.jp/programming/numpy/rdb_to_pandas.html
def create_db(): # PandasのDataFrameを生成 df = loadDataFrame(WAVDIR_ABSPATH) # PandasのDataFrameをSQLiteに保存 with sqlite3.connect('ExpData2.db') as conn: # conn.execute("DROP TABLE IF EXISTS tbl_golf") psql.to_sql(df, 'tbl_golf', con=conn, index=True, if_exists='replace') cur = conn.execute('SELECT * FROM tbl_golf') print cur.fetchall()
def load_db(): # dbからデータを呼び出しpandasへ保存 with sqlite3.connect('ExpData2.db') as conn: sql = "SELECT * FROM tbl_golf" df = psql.read_sql(sql,conn) print df
http://blog.amedama.jp/entry/2015/12/05/132520
# -*- coding: utf-8 -*- import pickle class Sample(object): def __init__(self, filename): """非 Pickle 化されるときは呼ばれない""" # 文字列は Pickle 化できる self.filename = filename # ファイルオブジェクトは Pickle 化できない self.file = open(filename, mode='rb') def __getstate__(self): """Pickle 化されるとき呼ばれる""" # オブジェクトの持つ属性をコピーする state = self.__dict__.copy() # Pickle 化できない属性を除去する del state['file'] # Pickle 化する属性を返す return state def __setstate__(self, state): """非 Pickle 化されるとき呼ばれる""" # オブジェクトの持つ属性を復元する self.__dict__.update(state) # Pickle 化できなかった属性を作りなおす self.file = open(self.filename, mode='rb') def main(): obj = Sample('/dev/null') binary = pickle.dumps(obj) restored_obj = pickle.loads(binary) print(restored_obj.filename) print(restored_obj.file) if __name__ == '__main__': main()
import sqlite3 import pickle
class Abcdefg(object): def __init__(self): self.a=10 def play(self): print self.a
a = Abcdefg() pdata = pickle.dumps(a, protocol=1)
sqlite3.register_converter("pickle", pickle.loads)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES) cur = con.cursor()
cur.execute("create table test (arr pickle)")
cur.execute("insert into test (arr) values (?)", (sqlite3.Binary(pdata), ))
cur.execute("select arr from test")
data = cur.fetchone()[0] data.play()